Доступ к именам COM-устройств в C ++ / Win7

0

Я пытаюсь написать программу, которая отправляет информацию о COM-портах на устройства, которые могут быть отключены, и в конечном итоге с другим номером COM-порта. Используя SetupDi, я знаю, что можно перечислить все COM-порты на компьютере по номеру, но учитывая, что число может измениться, я пытаюсь найти лучший способ доступа к COM-портам.

СОМ-устройства, которые я использую, являются адаптерами серии FTDI serial-to-com, которые позволяют мне программировать модель устройства. Я хотел бы иметь возможность выбирать COM-порт на основе модели устройства. Я пробовал (почти) все свойства, которые я могу получить, используя SetupDi, но не кубики. Похоже, существует разница между списком устройств SetupDi, который позволяет мне получить доступ, и устройствами, которые отображаются в разделе "Устройства и принтеры" (где отображается название модели). Есть ли способ получить устройства в окне "Устройства и принтеры" программно и сопоставить их с COM-портом с помощью Windows API?

Теги:
windows-7
serial-port

1 ответ

1
Лучший ответ

Ссылка ниже - отличный (если не единственный) всеобъемлющий обзор того, как перечислять COM-порты в Windows и извлекать дополнительную информацию различными способами:

http://www.naughter.com/enumser.html

То, что мы используем в нашем собственном программном обеспечении (Docklight), соответствует тому, что показывает путь "UsingSetupAPI1" из файла enumser.cpp(SetupAPI - GUID_DEVINTERFACE_COMPORT). Пример UsingSetupAPI1 демонстрирует, как извлечь имя устройства, как показано в диспетчере устройств Windows, вместе с номером COM. Это называется "friendlyNames" в коде enumser.cpp.

Другой способ идентификации и связи с вашим устройством может быть не в первую очередь запрашивать Windows, а API FTDI D2XX:

http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples.htm

Мы используем API D2XX для связи, когда знаем, что это всегда устройство FTDI. Идентификация проще, и мы имеем гораздо лучшую производительность/меньшую задержку, чем с помощью Windows Communications API через "виртуальный COM-порт".

Если нам необходимо сопоставить номера COM-портов и идентификатор устройства FTDI, мы используем функции ListDevices API FTDI D2XX и функции GetComPortNumber.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню