Список SerialPorts, запрашиваемых с помощью WMI, отличается от devicemanager?
у меня есть следующие последовательные порты, перечисленные в моем devicemanager:
- COM3
- COM4 (BT)
- COM5 (BT)
- COM6 (GlobeTrotter MO67xx-интерфейс управления)
- COM7 (GlobeTrotter MO67xx-интерфейс управления GPS)
- COM8 (интерфейс данных GlobeTrotter MO67xx-GPS)
- COM9 (GlobeTrotter MO67xx - интерфейс диагностики)
- COM11 (последовательный порт USB)
- COM12 (серийный USB Порт)
- COM45 (порт COM SUNIX)
- COM46 (порт COM SUNIX)
на порты COM SUNIX подключаются через внутреннюю PCI-карту. The последовательный порт USB подключается через USB (fdti-чип) The порты GlobeTrotter С устройства GlobeTrotter, подключенного через USB. Для этого модема также перечислены модем, USB-устройство и сетевое устройство.
поэтому у меня есть несколько разных источников серийного порты.
все, что я хочу сделать, это получить список, содержащий все эти порты с помощью WMI.
для моих тестов я использую создатель кода WMI
3 ответов
Я нашел решение.
следующий запрос (root\CIMV2
) получает запрошенные результаты:
SELECT * FROM Win32_PnPEntity WHERE ClassGuid="{4d36e978-e325-11ce-bfc1-08002be10318}"
The Win32_SerialPort
класса в этой статья сообщает о физических com-портах, если вы хотите перечислить все последовательные порты, включая USB-Serial/COM
порты, вы должны использовать MSSerial_PortName
класса, расположенный в root\wmi
пространство имен.
также попробуйте эти классы, расположенные в том же пространстве имен
MSSerial_CommInfo
MSSerial_CommProperties
MSSerial_HardwareConfiguration
MSSerial_PerformanceInformation
Примечание : Если вы хотите знать свойства и методы этого класса можно использовать WMI Delphi Code Creator.
в моем случае у меня есть физические последовательные порты, последовательные порты USB и виртуальные последовательные порты com0com. Мне нужны как полные имена, так и адреса COM-портов.
запрос, предложенный в ответ не находит порты com0com. Запрос, предложенный в ответ требуются привилегии администратора.
SELECT * FROM Win32_PnPEntity
найти все устройства. Он возвращает физические устройства, подобные этому, и адрес может быть проанализирован из Caption
:
Serial Port for Barcode Scanner (COM13)
однако, для портов com0com Caption
вот так (без адреса):
com0com - serial port emulator
SELECT * FROM Win32_SerialPort
возвращает адреса (DeviceID
), а также полные имена (Name
). Однако он находит только физические последовательные порты и порты com0com, а не последовательные порты USB.
Итак, в конце концов, мне нужно два вызова WMI:SELECT * FROM Win32_SerialPort
(адрес DeviceID
) и SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%(COM%'
(адрес может быть проанализирован с Caption
). Я сузил Win32_PnPEntity
вызов, потому что его нужно только найти устройства, которые не были найдены при первом вызове.