|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » USB : Автоматическое обнаружение съёмных дисков |
|
USB : Автоматическое обнаружение съёмных дисков
|
Старый параноик Сообщения: 2423 |
Профиль | Отправить PM | Цитировать
Задача уже не требует решения.
Конфигурация: Windows XP, USB-концентратор (определяется как «универсальный USB концентратор») на 4 порта, к нему цепляются 4 кард-ридера (определяются как «Запоминающее устройство для USB»). В кард-ридеры пихаем MMC-карты, виндовый проводник шустро на них реагирует, моментально открывая окошки автозапуска («Какое действие следует выполнять виндоуз?»). Теперь тоже самое нам надо определить из своей программы – как только карточку вставят, мы должны 1. узнать об этом; 2. определить букву диска. Несмотря на кажущуюся простоту, нас ждёт облом. Решение было лобовое – отлавливаем WM_DEVICECHANGE и смотрим, что там произошло. Но оказалось, что сообщение об изменении статуса USB-устройства приходит с огромной задержкой (а иногда и вообще не приходит, например, если карточку вытащить). За это время карточку можно раз двадцать вытащить/ставить. Повторяю, виндовый проводник реагирует мгновенно. Теоретически, траблы можно было бы списать на то, что собственно никакого изменения конфигурации не происходит, ибо диски, соответствующие USB накопителям, никуда не исчезают из системы при вытаскивании MMC (и не появляются, соответственно). Отключения-то не происходит, устройства так и числятся в «Мой компьютер», как, например, дисковод – он же там всегда есть, с дискетой или без. Но тогда бы не приходило бы вообще никаких сообщений. А так – приходят, но с огромной паузой. В PSDK ясно написано, что Цитата:
|
||
Отправлено: 18:44, 09-12-2004 |
Пользователь Сообщения: 84
|
Профиль | Отправить PM | Цитировать А HandlerEx не пробовал?
|
Отправлено: 21:44, 10-12-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 84
|
Профиль | Отправить PM | Цитировать Ой-ой-ой... Это для сервисов. Но, там же сказано: «Any application with a top-level window can receive basic notifications by processing the WM_DEVICECHANGE message. Applications can use the RegisterDeviceNotification function to register to receive device notifications». Сообщения WM_DEVICECHANGE будут приходить в любом случае. А чтобы получать сообщения типа DBT_DEVICEARRIVAL, надо использовать RegisterDeviceNotification. Там же в примере «Registering for Device Notification» сказано: «The application will receive the WM_DEVICECHANGE message whenever a device interface event notification is sent. Currently, the only events that will be received for device interfaces are DBT_DEVICEARRIVAL and DBT_DEVICEREMOVECOMPLETE». А насколько я понял, тебе надо получать что-то вроде DBT_CONFIGCHANGED.
|
Отправлено: 22:18, 10-12-2004 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Автоматическое подключение сетевых дисков | hoho | Microsoft Windows 2000/XP | 5 | 11-06-2012 09:08 | |
Винда и много USB-устройств (монтирование дисков) | AKiNO | Microsoft Windows NT/2000/2003 | 1 | 14-11-2009 17:46 | |
FreeBSD - Выключение питания внешних USB жестих дисков. Конкретные модели. | zilia | Общий по FreeBSD | 0 | 10-09-2009 14:17 | |
Автоматическое назначение имен дисков | dushes | Автоматическая установка Windows 2000/XP/2003 | 10 | 18-06-2009 20:23 | |
Автоматическое монтирование дисков | Artla_ | Общий по Linux | 1 | 24-03-2007 23:07 |
|