Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.131.168] |
|
Сообщ.
#1
,
|
|
|
Как определить произошла ли установка Plug&Play устройства аля USB? Нужно узнать момент когда винда закончит установку драйвера для устройства USB.
Программа ждет установки устройства. Когда для него появятся драйвера в СД-ПЗУ и винда обновит свою базу данных драйверов. А потом должна продолжать успешную работу. Есть ли какое н-ть сообщение которое сообщает о появлении нового устройства в системе. Если можно, ответы по существу киданите на мыло pharaon@tut.by. |
Сообщ.
#2
,
|
|
|
Для этого есть сообщение WM_DEVICECHANGE. В WPARAM лежит дополнительный код, что именно произошло:
DBT_DEVICEARRIVAL - добавили девайс DBT_DEVICEREMOVECOMPLETE - убрали :-/ Зарегестрироваться на сообщение можно так: <br>// hWnd == Окно которое будет обрабатывать WM_DEVICECHANGE.<br>HDEVNOTIFY hNotifyDevHandle , hNotifyHubHandle;<br>DEV_BROADCAST_DEVICEINTERFACE broadcastInterface;<br><br>// Register to receive notification when a USB device is plugged in.<br>broadcastInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);<br>broadcastInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;<br><br>memcpy( &(broadcastInterface.dbcc_classguid), &(GUID_CLASS_USB_DEVICE), sizeof(struct _GUID));<br>hNotifyDevHandle = RegisterDeviceNotification( hWnd, &broadcastInterface, DEVICE_NOTIFY_WINDOW_HANDLE);<br><br>memcpy( &(broadcastInterface.dbcc_classguid), &(GUID_CLASS_USBHUB), sizeof(struct _GUID));<br> <br>hNotifyHubHandle = RegisterDeviceNotification( hWnd, &broadcastInterface, DEVICE_NOTIFY_WINDOW_HANDLE);<br> Разрегестрироватся так: <br>if(hNotifyDevHandle) UnregisterDeviceNotification( hNotifyDevHandle);<br>if(hNotifyHubHandle) UnregisterDeviceNotification( hNotifyHubHandle);<br> Одна беда...юзаются GUID. Если у тебя стоит DDK, то всё прокатит. Если нет - можешь использовать жесткие класс-ID девайсов: GUID_CLASS_USB_DEVICE -> "A5DCBF10-6530-11D2-901F-00C04FB951ED" GUID_CLASS_USBHUB -> "f18a0e88-c30c-11d0-8815-00a0c906bed8" |
Сообщ.
#3
,
|
|
|
Спасибо, AlexSm, если есть еще замечания предложени то не откажусь.
|
Сообщ.
#4
,
|
|
|
Кстати, AlexSm, откеуда цитата? Может я сам гляну и проникнусь, или это из собственного опыта?
|
Сообщ.
#5
,
|
|
|
Из комментариев к работающему коду, для лучшего понимания читающего сие творение...
|
Сообщ.
#6
,
|
|
|
Сорри...заврался совсем :D На комменты и код копирайт у мелкософта ;D
Это из исходников к DDK. "src/wdm/usb/usbview/usbview.c" <br>Copyright (c) 1997-1998 Microsoft Corporation<br>Module Name:<br> USBVIEW.C<br>Abstract:<br> This is the GUI goop for the USBVIEW application.<br>Environment:<br> user mode<br>Revision History:<br> 04-25-97 : created<br> |
Сообщ.
#7
,
|
|
|
Низкий поклон товарищу AlexSm, господину DDK и профессору MSDN. Все заработало.
Устройство втыкается, сообщение прилетает, и все довольны. Еще раз спасибо. |