Russian Qt Forum

Qt => Общие вопросы => Тема начата: gf59 от Сентябрь 25, 2009, 13:29



Название: Определение списка устройств в Windows
Отправлено: gf59 от Сентябрь 25, 2009, 13:29
Всем доброго времени суток!

Имеется устройство, работающее с компом через usb-com
т.к. когда оно подключается, в список устройств добавляется Com-порт, и, соответственно, исчезает, когда шнурок выдёргивается.

Когда ни одна программа к виртуальному ком-порту не подключена, отслеживать включение-выключение просто - делаешь энумерацию (библиотеками для ком-портов) или смотришь реестр, там изменения появляются сразу же.

Но если программа подключена к порту, он не исчезает из списка устройств в реестре и в библиотечных функциях! (хотя диспетчер устройств Windows реагирует моментально)

Можно это обойти средствами библиотек? (сейчас использую QSerialDevice)
Или может вообще подключиться к каким-нибудь сигналам, показывающим подключение-отключение всех устройств (не только ком-портов)?


Название: Re: Определение отключения Com-порта
Отправлено: gf59 от Сентябрь 25, 2009, 15:08
Нашёл класс QApplicationExt, обрабатывающий сообщения Windows о подключении/отключении устройств.
Но что именно подключилось, для моего устройства не показывается
(идёт сообщение WM_DEVICECHANGE, wParam=DBT_DEVNODES_CHANGED, у которого всегда нулевой lParam)

Поэтому сейчас надо получить список usb-устройств
(тему http://www.prog.org.ru/topic_10423_0.html не предлагать - у меня не носители информации, а usb-com!)

Как это можно сделать в кьюте?
ОСь - винда ХР, под другие ОСи не надо пока


Название: Re: Определение списка устройств в Windows
Отправлено: gf59 от Сентябрь 25, 2009, 18:01
Сам быстрей ответ нашёл :)
В реестре пишутся все устройства
Нужная мне ветка - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbser
в ней перечисляются устройства usb-com и ветки с полной информацией о них

И самое главное, что мне надо - информация здесь не блокируется, когда ком-порт открыт программой, как в ветке HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP