Список 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 вызов, потому что его нужно только найти устройства, которые не были найдены при первом вызове.