Как перечислить windows LPT порты и их диапазон ввода / вывода?
Я работаю над проектом для управления некоторыми устройствами через порт lpt. Я использую inpout32.dll для получения необработанного доступа к портам и сейчас пытаюсь перечислить все доступные порты LPT и получить их диапазон ввода / вывода.
Теперь я могу проверить диспетчер устройств, но есть ли более автоматизированный способ?
Сейчас я пытаюсь использовать 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
в строке "Для каждого из вложений" я получаю сообщение об ошибке. Также я не уверен, если поиск соответствующей сущности поможет мне.
PS. Наконец, я понял, как перечислить диапазоны портов ввода / вывода lpt.
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
1 ответ
Вы получаете ошибку, потому что PNPDeviceID
содержит обратную косую черту (\
) и обратные косые черты в WQL-запросах должны быть удвоены. Просто сделайте замену \
с \\
в port.PNPDeviceID
перед вставкой в ваш запрос, и ваш скрипт будет работать нормально:
strPNPDeviceID = Replace(port.PNPDeviceID, "\", "\\")
Set pnpentities = wmiService.ExecQuery( _
"SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID = '" & strPNPDeviceID & "'")
Вы также можете найти этот вопрос полезным: Как найти доступные параллельные порты и их адреса ввода / вывода, используя Delphi и WMI.