プリンタポートの取得の仕方

解決


しゅとっく  2004-09-03 14:42:21  No: 85415  IP: [192.*.*.*]

現在、プリンタポートを次のように取得しています。
For Each defPrinter In Printers
    If defPrinter.DeviceName = "あるプリンタ名" Then
        pb_pdforigin = defPrinter.Port
    End If
Next

Windows98ではうまくいくのですが、WindowsXPではうまくいきません。
ポートが"Ne02"となってしまっています。
98とXPでは取得の仕方が違うのでしょうか?

環境 VB5.0

編集 削除
くま  2004-09-03 23:18:18  No: 85416  IP: [192.*.*.*]

>ポートが"Ne02"となってしまっています。
XPにインストールしたプリンタのポートがNe02となっているからじゃないですか?
当該プリンタのプロパティを表示して使用ポートを調べて見てください。

編集 削除
もじお  2004-09-06 08:40:13  No: 85417  IP: [192.*.*.*]

くまさん、返答ありがとうございます。
当該プリンタ(Acrobat Distiller)のポートは
ローカルディレクトリ\*.pdfとなっています。

Printersコレクションからプリンタを取得して
ポートを表示してみると、順番にNe00,Ne01,Ne02・・・
みたいになっているようです。

APIを使わなければうまくいかないのでしょうか?
できれば、今のままであまりかえたくないのですが・・・
(わがままですが)

編集 削除
しゅとっく  2004-09-06 08:43:31  No: 85418  IP: [192.*.*.*]

あ、しゅとっく=もじおですので。

編集 削除
くま  2004-09-06 12:52:15  No: 85419  IP: [192.*.*.*]

プリンタのプロパティに表示されているポートの名前が
内部的にはNe02というポートを使用しているだけのことです。
何かプリンタのポートを指定しなければならないコマンドを
使用する場合、Ne02を指定してやれば問題なく動作します。

WMIを使用するとご希望の名前が得られますがVBのPrinterオブジェクトで
このポート名を指定して動作するかどうかは検証していません。

  Dim strComputer As String
  Dim objWMIService As Object
  Dim colInstalledPrinters As Object
  Dim objPrinter As Object
  
  strComputer = "."
  Set objWMIService = GetObject("winmgmts:" _
      & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  Set colInstalledPrinters = objWMIService.ExecQuery _
      ("Select * from Win32_Printer")
  For Each objPrinter In colInstalledPrinters
      Debug.Print "Name: " & objPrinter.Name
      Debug.Print "PortName: " & objPrinter.PortName
  Next

編集 削除
しゅとっく  2004-09-06 15:10:18  No: 85420  IP: [192.*.*.*]

くまさんご返答ありがとうございました。

教えていただいたコードを元にやってみます。

私からはかなりの亀レスであったのに、大変丁寧なご返答を
頂きまして、本当にありがとうございました。

編集 削除