【问题标题】:How to enumerate windows LPT ports and their I/O Range?如何枚举 Windows LPT 端口及其 I/O 范围?
【发布时间】:2010-07-24 14:59:12
【问题描述】:

我正在研究通过 lpt 端口控制一些设备的项目。 我正在使用 inpout32.dll 获取对端口的原始访问权限,现在尝试枚举所有可用的 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

在线'对于 pnpentities 中的每个 pnpentity' 我得到错误。 如果找到相应的实体对我有帮助,我也不确定。

附言。 最后我想出了如何枚举 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

【问题讨论】:

    标签: windows wmi lpt


    【解决方案1】:

    您收到错误消息,因为PNPDeviceID 包含反斜杠 (\) 并且 WQL 查询中的反斜杠必须加倍。只需在将port.PNPDeviceID 中的\\ 替换为\,然后再将其插入到您的查询中,您的脚本就可以正常工作:

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


    您可能还会发现这个问题很有用:How to find available parallel ports and their I/O addresses using Delphi and WMI

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多