klen |
Отправлено: 20.11.2005, 12:44 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Как это сделать правильно?
Вызывать CreateFile с COM1 COM2 .... и анализировать результат это както плохо, потому что не известно какой порт будет крайним.. |
|
londinium |
Отправлено: 20.11.2005, 15:59 |
|
Не зарегистрирован
|
Можно пробежаться в цикле от 1 до 5 и попробовать открывать порт с номером i. Я пробовал — действительно помогает. |
|
klen |
Отправлено: 20.11.2005, 18:44 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Не поможет!
Я могу виртуальный порт создать под номером COM725 например — че тогда?
Нужен именно перечеслитель сомуникационных устройств. Далжно ж это гдето быть... |
|
Отвёрткин |
Отправлено: 20.11.2005, 19:36 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
Есть такая функция
void GetSerialPortsList(LPSTR szSymbol);
сам не применял |
|
Rius |
Отправлено: 21.11.2005, 09:31 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
или так
CODE | //---------------------------------------------------------------------------
void GetSerialPortsList(TStrings* SerialPortList)
{
AnsiString KeyName = "\\Hardware\\DeviceMap\\SerialComm";
TStringList *SerialCommValues = new TStringList();
TRegistry *Registry = new TRegistry;
try
{
Registry->RootKey = HKEY_LOCAL_MACHINE;
Registry->OpenKeyReadOnly( KeyName );
Registry->GetValueNames( SerialCommValues );
SerialPortList->Clear();
for(int i=0; i<SerialCommValues->Count; i++)
{
SerialPortList->Add( Registry->ReadString(SerialCommValues->Strings[i]));
}
}
__finally
{
delete Registry;
delete SerialCommValues;
}
}
//---------------------------------------------------------------------------
|
|
|
klen |
Отправлено: 21.11.2005, 10:39 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
QUOTE (Отвёрткин @ 20/11/2005, 19:36) | Есть такая функция
void GetSerialPortsList(LPSTR szSymbol);
сам не применял |
Это где эта функция то определена??? Чето найти не могу.
2_Rius
К сожалению информация об устройствах в записях \\Hardware\\DeviceMap\\SerialComm значительно отличается от той что выдает диспетчер усттройств, как он перечисляет устройства???
Отредактировано klen — 21/11/2005, 11:00
|
|
Отвёрткин |
Отправлено: 21.11.2005, 13:03 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
QUOTE (klen @ 21/11/2005, 13:39) | QUOTE (Отвёрткин @ 20/11/2005, 19:36) | Есть такая функция
void GetSerialPortsList(LPSTR szSymbol);
сам не применял |
Это где эта функция то определена??? Чето найти не могу.
|
Насколько я понял это Win32 API, для обращения из обычьной программы написаной на билдире уже определена по умолчанию.
Отредактировано Отвёрткин — 21/11/2005, 16:13 |
|
Отвёрткин |
Отправлено: 21.11.2005, 13:44 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
В соседнем форуме посмотри
COM-порты. Найти всех
Особено если используешь VaComm |
|
londinium |
Отправлено: 21.11.2005, 20:52 |
|
Не зарегистрирован
|
Здравствуйте!
На API это сделать вряд ли возможно. Вот цитата из MSDN July2000
"One thing to note about port names is that traditionally they have been COM1, COM2, COM3, or COM4. The Win32 API does not provide any mechanism for determining what ports exist on a system. Windows NT and Windows 95 keep track of installed ports differently from one another, so any one method would not be portable across all Win32 platforms. Some systems even have more ports than the traditional maximum of four. Hardware vendors and serial-device-driver writers are free to name the ports anything they like. For this reason, it is best that users have the ability to specify the port name they want to use. If a port does not exist, an error will occur (ERROR_FILE_NOT_FOUND) after attempting to open the port, and the user should be notified that the port isn’t available."
Буду рад, если кто-то просветит, что пишут по этому поводу в более поздних версиях MSDN
|
|
klen |
Отправлено: 21.11.2005, 21:57 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
QUOTE (londinium @ 21/11/2005, 20:52) | One thing to note about port names is that traditionally they have been COM1, COM2, COM3, or COM4. The Win32 API does not provide any mechanism for determining what ports exist on a system. |
Полностью согласен с Билли...
А вообще то есть метод, залесть в ядро и прочитать структуры там! это можно но это не поправилам. Видимо менеджер устройств именно так и делает. А вот в какой степени реестр отражает текущую ситуацию ... это вообще непонятно.
Отредактировано klen — 21/11/2005, 22:00 |
|
Rius |
Отправлено: 22.11.2005, 09:18 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
везде где мы пробовали, реестр список портов отображает правильно
странно, что у вас не совпадает
|
|
Отвёрткин |
Отправлено: 22.11.2005, 11:07 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
QUOTE (Rius @ 22/11/2005, 12:18) | везде где мы пробовали, реестр список портов отображает правильно
странно, что у вас не совпадает |
Вопрос. Даже для, PnP Com-портов через USB, которые подключаются/отключаются на ходу ?
Поиск перебором существующих портов через CreateFile действительно плох. В последовательности номеров могут быть пропуски. Из собственного опыта, драйвер платы PCI дополнительных портов создавал порты COM5 и COM6, а COM3 и COM4 отсутствовали.
И где останавливать поиск? |
|
Rius |
Отправлено: 22.11.2005, 14:18 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
QUOTE (Отвёрткин @ 22/11/2005, 14:07) | QUOTE (Rius @ 22/11/2005, 12:18) | везде где мы пробовали, реестр список портов отображает правильно
странно, что у вас не совпадает |
Вопрос. Даже для, PnP Com-портов через USB, которые подключаются/отключаются на ходу ? |
для них тоже
подключаю/отключаю адаптер, нажимаю в редакторе реестра F5 и наблюдаю соответствующий список портов.
Gedeon надеюсь картинка не слишком большая
Отредактировано Rius — 22/11/2005, 19:59
|
|
Gedeon |
Отправлено: 22.11.2005, 16:40 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (Rius @ 22/11/2005, 14:18) | image ... |
Вы можете прямо к сообщению прикладывать файл с изображением например в формате *.jpg и он будет прямо в посте отображаться, все же легче чем ложить файл на другой сервак и давать на него ссылку.
|
|
Отвёрткин |
Отправлено: 22.11.2005, 18:49 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
2_Rius Спасибо, буду иметь ввиду на будущее.
|
|
klen |
Отправлено: 30.11.2005, 11:03 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Ну дык всеже как "это проворачивает" диспетчет устройств. Он что, открывает ключ реестра и ожидает пока состояние хендла не изменится в случе подключения сериального устройства? Бред какойто. |
|