我正在研究通过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
Run Code Online (Sandbox Code Playgroud)
在线上'For Each pnpentity In pnpentities'我得到了错误.如果找到相应的实体会帮助我,我也不会感到害羞.
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
Run Code Online (Sandbox Code Playgroud)
您收到错误,因为PNPDeviceID包含反斜杠(\)和WQL查询中的反斜杠必须加倍.只是做了更换的\与\\在port.PNPDeviceID其插入到你的查询之前,你的脚本将正常工作:
strPNPDeviceID = Replace(port.PNPDeviceID, "\", "\\")
Set pnpentities = wmiService.ExecQuery( _
"SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID = '" & strPNPDeviceID & "'")
Run Code Online (Sandbox Code Playgroud)
您可能还会发现此问题很有用:如何使用Delphi和WMI查找可用的并行端口及其I/O地址.
| 归档时间: |
|
| 查看次数: |
2865 次 |
| 最近记录: |