2014-01-26 4 views
4

Поскольку у меня установлены десятки виртуальных последовательных портов (COM), а половина из них - устройства Bluetooth, я хотел бы знать, какой порт принадлежит устройству, и подключается ли он напрямую или через Bluetooth.Как получить конкретную информацию о последовательном (COM) порту в Windows?

В частности, меня не интересует тривиальное перечисление всех последовательных портов, которое будет показывать только список «COM» + соответствующего номера, но настоящее имя этого устройства и, вероятно, его идентификатор устройства (где можно найти информацию о том, подключается ли это через USB или Bluetooth.

Хотя я мог получить эту информацию через WMI, есть много проблем, связанных с этим методом. В частности, это чертовски медленно, но также и список (за исключением устройств Bluetooth, которые могут быть подключены и показаны независимо от реального соединения)

Я бы предпочел решение, написанное в Delphi/Obje ct Pascal, но любой другой язык также подходит для меня (код доступа WMI был скопирован с C#).

+0

Используйте SetupAPI. –

ответ

6

Если вы используете язык программирования/API, который может читать реестр, проверьте поддерево HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum.

У этого есть подразделы, содержащие тип устройства, класс устройства, идентификатор экземпляра. Каждый идентификатор экземпляра имеет подраздел Device Parameters\PortName, который имеет имя COM.

Например, в моей системе

ACPI\PNP0501\1\Device Parameters\PortName = COM1 
BTHENUM\{GUID}{ID}\Device Parameters\PortName = COM4 

ключи в ID части имеют дополнительную информацию, например

ACPI\PNP0501\1\FriendlyName = Kommunikationsanschluss (COM1) (german windows) 
ACPI\PNP0501\1\Service = Serial 
BTHENUM\{GUID}{ID}\Service = BTHMODEM 

Используйте редактор реестра для проверки себя, какие части вам интересно. Но это должно дать вам всю необходимую информацию.

+0

Я искал SO вверх и вниз в поисках способа получить эту информацию. Пила десятки вопросов ... и, по крайней мере, столько ответов, и это пока что единственное прямолинейное. Большое вам спасибо, вы помогли мне решить проблему! – Renan

+0

Я использую 'hardware \ devicemap \ serialcomm', и в названии ключа есть подсказка, какое устройство это устройство, например \ Device \ BthModem0 для устройства Bluetooth и \ Device \ USBSER000 для устройства USB. – Codebeat

Смежные вопросы