Как я получаю список доступных последовательных портов в Win32?

В моем случае это был сервер Экспо, который иногда не ловит filesaves в Windows (вероятно), и это была seening старая версия компонента, который я попытался соединить (у меня не было экспорта там еще, вероятно). Пересохранение моего компонента, ничего действительно не касаясь устранило проблему.

Перезапуск сервер Экспо с убранным кэшем, вероятно, помог бы также.

49
задан GrahamS 7 September 2009 в 00:19
поделиться

3 ответа

EnumSerialPorts v1.20 , предложенный Ником D, использует девять различных методов для вывода списка последовательных портов! У нас определенно нет недостатка в выборе, хотя результаты кажутся разными.

Чтобы избавить других от неприятностей, я перечислю их здесь и укажу на их успех в обнаружении портов com0com на моем ПК ( XP Pro SP2):

  1. CreateFile («COM» + 1-> 255) по предложению Ваэля Даллула

  2. Итерация по ключу реестра HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM
    ✔ Обнаружены порты com0com, потребовалось 0 мс. Очевидно, это то, что использует SysInternals PortMon .

Основываясь на этих результатах, я думаю, что метод WMI, вероятно, лучше всего подходит моим требованиям, поскольку он относительно быстр и в качестве бонуса также дает понятные имена (например, «Связь Порт (COM1) "," com0com - эмулятор последовательного порта ").

76
ответ дан 7 November 2019 в 11:40
поделиться

Похоже, это непростая задача.

Обратите внимание на это: EnumSerialPorts v1.20

11
ответ дан 7 November 2019 в 11:40
поделиться

вы можете сделать цикл, например, от 1 до 50 и попытаться открыть каждый порт. Если порт доступен, открытый будет работать. Если порт используется, вы получите сообщение об ошибке общего доступа. Если порт не установлен, вы получите сообщение об ошибке «файл не найден».

, чтобы открыть порт, используйте CreateFile API:

HANDLE Port = CreateFile(
                  "\\\\.\\COM1",
                  GENERIC_READ | GENERIC_WRITE,
                  0,
                  NULL,
                  OPEN_EXISTING,
                  FILE_ATTRIBUTE_NORMAL,
                  NULL);

, затем проверьте результат.

5
ответ дан 7 November 2019 в 11:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: