2

私はlptポートを介していくつかのデバイスを制御するためのプロジェクトに取り組んでいます。inpout32.dllを使用してポートへのrawアクセスを取得し、使用可能なすべてのLPTポートを列挙してI/O範囲を取得しようとしています。

デバイスマネージャを確認できるようになりましたが、自動化された方法はありますか?

今、私はWMIを使用しようとしていますが、動作するはずのサンプルコードが動作しません

Set wmiService = GetObject("winmgmts:\\.\root\cimv2")

Set parallelports = wmiService.ExecQuery("SELECT * FROM Win32_ParallelPort")                      

For Each port In parallelports
    q = "SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID = '" & port.PNPDeviceID & "'"
    Set pnpentities = wmiService.ExecQuery(q)

    For Each pnpentity In pnpentities
        wscript.echo pnpentity.PNPDeviceID
    Next
Next

オンライン'各pnpentityInpnpentities'エラーが発生します。また、対応するエンティティを見つけることが私を助けるかどうかはわかりません。

PS。最後に、lpt i/oポート範囲を列挙する方法を理解しました。

Set wmiService = GetObject("winmgmts:\\.\root\cimv2")

Set parallelports = wmiService.ExecQuery("SELECT * FROM Win32_ParallelPort")

For Each port In parallelports
    Set port_resources = wmiService.ExecQuery("ASSOCIATORS OF {Win32_ParallelPort.DeviceID='" & port.DeviceID & "'} WHERE ResultClass = Win32_PortResource")

    For Each port_resource In port_resources
        wscript.echo port_resource.Caption
    Next
Next
4

1 に答える 1

5

PNPDeviceIDWQLクエリにバックスラッシュ(\)が含まれており、バックスラッシュを2倍にする必要があるため、エラーが発生します。クエリに挿入する前に、 \with \\inを置き換えるだけで、スクリプトは正常に機能します。port.PNPDeviceID

strPNPDeviceID = Replace(port.PNPDeviceID, "\", "\\")
Set pnpentities = wmiService.ExecQuery( _
    "SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID = '" & strPNPDeviceID & "'")


また、この質問が役立つ場合があります。DelphiとWMIを使用して、使用可能なパラレルポートとそのI/Oアドレスを見つける方法

于 2010-07-24T16:49:26.973 に答える