|
Как определить имена существующих ком портов |
|
|
|
Mar 2 2010, 13:57
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
Если лень разбираться, то существует множество классов для перечисления доступных портов. Например, вот здесь: http://naughter.com/enumser.html
|
|
|
|
|
Mar 2 2010, 17:19
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Да проще будет использовать готовый класс. Код array<String^>^ NameComPortSysArr = nullptr; NameComPortSysArr=ComPort->GetPortNames(); for each(String^ PortName in NameComPortSysArr){ СomBoxComPort->AddItemsCore(PortName); }//end for Еще есть вопрос, тоже наверняка простой, в проекте одна форма (Form1) на нее поместил, компонент ком порта и кнопку. Добавил к проекту еще одну форму ( Form2 ) как сделать что бы, при нажатии на кнопку на первой форме, показалась вторая Form2::Show(); Пробовал #include form2.h ошибка при компиляции. И , что бы с формы два был доступен компонент, который поместил на первую форму.
|
|
|
|
|
Mar 2 2010, 22:39
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(DpInRock @ Mar 1 2010, 20:36)  Прочитать соответсвующее поле реестра. Это плохой способ, т.к. он годится только для хардверных COM-портов. А на виртуальных COM-портах (USB/COM-конверторы) эта затея не проходит - после выдергивания конвертора из гнезда, в реестре его описание продолжает оставаться. Это метод показывает не реально доступные в системе порты, а весь список когда-либо в ней существовавших. Цитата(Yaumen @ Mar 2 2010, 16:57)  Если лень разбираться, то существует множество классов для перечисления доступных портов. Например, вот здесь: http://naughter.com/enumser.html Красотища! Все способы испробовали! Крайне познавательные исходники. Спасибо!
|
|
|
|
|
Mar 3 2010, 00:26
|

Профессионал
    
Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955

|
Цитата(Xenia @ Mar 3 2010, 08:39)  А на виртуальных COM-портах (USB/COM-конверторы) эта затея не проходит - после выдергивания конвертора из гнезда, в реестре его описание продолжает оставаться. Это метод показывает не реально доступные в системе порты, а весь список когда-либо в ней существовавших. Не, я специально перед написанием поста попробовал, воткнул девайс с FT232 и еще USB-COM. Все корректно появилось и корректно исчезло после выдергивания. Именно в той ветке реестра, что указана. Ну, может у меня одного... Еще, есть туча USB-конверторов, что работают некорректно. Возможно, и с реестром в том числе. Я свой специально подбирал, предварительно читал обзоры в инете.
Сообщение отредактировал V_G - Mar 3 2010, 00:29
|
|
|
|
|
Mar 4 2010, 07:42
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(sigmaN @ Mar 4 2010, 04:49)  Доподленно известно, что в реестре могут оставаться устройства-фантомы. Причём они сконфигурированы и готовы, но в диспетчере устройств не отображаются по причине их физического удаления Именно так. Диспетчер устройств на включения/отключения USB-устройств реагирует правильно, но записи в реестре не обязаны отслеживать реальную динамику. Более того, запись в реестре по поводу того или иного USB/COM-конвертора и не должна удаляться при его отключении, т.к. компьютер должен помнить номер COM-порта этого устройства, чтобы при повторном его присоединении номер порта не изменялся. Поэтому идея доставать номера COM-портов из реестра крайне неудачная, ибо в реестре этих COM-портов может быть описано больше, чем реально имеется в данный момент. Что же касается самого диспетчера устройств, то очевидно, что данные он берет не из реестра. Наиболее хорош способ через API-функцию EnumPorts(), она всегда сообщает правду. Недостаток ее только в том, что в полях заполняемой ею структуры нет всех тех данных, которые сообщает диспетчер устройств. А в частности мне не удалось с ее помощью различать настоящие COM-порты от виртуальных, когда как диспетчер устройств это явно показывает. Но для определения наличия портов способностей этой функции вполне достаточно.
Сообщение отредактировал rezident - Mar 4 2010, 13:38
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Mar 4 2010, 09:04
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(Xenia @ Mar 4 2010, 09:42)  Более того, запись в реестре по поводу того или иного USB/COM-конвертора и не должна удаляться при его отключении, т.к. компьютер должен помнить номер COM-порта этого устройства, чтобы при повторном его присоединении номер порта не изменялся. А она и не удаляется, просто эта запись делается изначально в другом месте, и Вы в этом убедитесь, если заглянете в ветку (пример) "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_10c4&Pid_ea60\0001" где последнее - серийный номер, именно по нему различаются конвертеры с одинаковым vid/pid. Чуть глубже в ветке "Device parameters" есть поле "PortName" в котором и есть номер прта на который будет подключен конвертер.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|