Как перечислить 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.

Другие вопросы по тегам