Откройте для себя последовательные порты в C # - PullRequest
2 голосов
/ 24 декабря 2011

Я пишу приложение, которое связывается, отправляя байты на USB-порт.Я хотел бы позволить пользователю выбрать порт, и для этого я использую SerialPort.GetPortNames().К сожалению, он возвращает пустой массив.Этот метод предположительно считывает данные реестра (HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM), но каталог SERIALCOMM отсутствует.Когда я запускаю программу в Linux, в ней перечислены мои четыре USB-порта, как и ожидалось.Как я могу исправить реестр / обнаружить порты по-другому?

Ответы [ 3 ]

2 голосов
/ 24 декабря 2011

Вы можете использовать объекты управления для запроса доступных COM-портов. Интересные таблицы:

Вы можете исследовать эти пространства имен в WMI Code Creator и генерировать код VBScript / VB / C #.

1 голос
/ 24 декабря 2011

SerialPort.GetPortNames() возвращает список установленных на машине COM-портов, а не USB-портов.Я не думаю, что Windows предоставит вам список портов USB, только USB-устройства, которые доступны.

Несмотря на название «Универсальная последовательная шина», они не являются «последовательными портами» в общепринятом значении.

1 голос
/ 24 декабря 2011

SerialPort.GetPortNames() - правильный метод для обнаружения последовательных портов.Но если вы используете Windows 7, я думаю, что это может быть проблемы с разрешениями на разделы реестра, которые этот метод перечисляет.Я нашел сообщение, описывающее эту проблему на Microsoft.com .

...