2010-07-24 67 views
2

我正在通過lpt端口控制某些設備的項目。 我正在使用inpout32.dll來獲取對端口的原始訪問權限,現在嘗試枚舉所有可用的LPT端口並獲取其I/O範圍。如何枚舉窗口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 

上線「對於每個pnpentity在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 

回答

5

你得到一個錯誤,因爲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