Обнаружьте вставку медиа в использование диска сообщения окон

Я в настоящее время использую WM_DEVICECHANGE, который будет уведомлен, когда новые Карты памяти подключены к компьютеру. Это работает отлично для устройств как карты флэш-памяти, где, как только устройство прибывает, это готово считать файлы из него. Для устройств как читатели SD-карты это делает, не потому что сообщение отослано однажды, когда устройство подключено, но никакое сообщение не отправляется, когда пользователь на самом деле вставляет карту в устройство.

Действительно ли возможно обнаружить вставку новых медиа в существующее USB-устройство, не имея необходимость использовать опрос?

6
задан rjschnorenberg 10 March 2010 в 20:01
поделиться

3 ответа

Я сделал это несколько недель назад. С технической точки зрения маршрут RegisterDeviceNotification - правильный путь, но для его правильного выполнения требуется приличный объем работы. Однако Windows Explorer уже делает всю тяжелую работу за вас. Просто используйте SHChangeNotifyRegister с SHCNE_DRIVEADD / SHCNE_DRIVEREMOVED / SHCNE_MEDIAINSERTED / SHCNE_MEDIAREMOVED. Обратите внимание, что этот метод зависит от службы Shell Hardware Detection (или от того, что она называется), но это намного проще, чем пытаться заново реализовать функциональность самостоятельно.

8
ответ дан 10 December 2019 в 00:36
поделиться

Возможно, это ошибка в драйвере устройства чтения SD. Описание в WM_DEVICECHANGE : «DBT_DEVICEARRIVAL 0x8000 Устройство или часть носителя были вставлены и теперь доступны».

Следовательно, вы должны получить уведомление о вставке носителя.

Вы пробовали использовать RegisterDeviceNotification ? По умолчанию отправляются только некоторые уведомления, и изменение мультимедиа может не входить в их число.

0
ответ дан 10 December 2019 в 00:36
поделиться

Возможно, это ошибка в драйверах устройств (я определенно так думаю), но все они, похоже, работают одинаково... НЕ. Поэтому на данный момент я не думаю, что вы сможете заставить разработчиков драйверов устройств изменить характеристики своих устройств, даже если Microsoft (вероятно, крупнейший разработчик) заставит вас поверить, что это должно работать именно так (Не работает для моего драйвера Windows7 microsoft). Вставка SD-карты в USB-устройство просто не вызывает сообщения WM_DEVICECHANGE.

Используйте SHChangeNotifyRegister для устройств медиа-типа. Он не требует регистрации devicenotification. А букву диска можно получить через SHGetPathFromIDList. Используйте SHCNE_MEDIAINSERTED и SHCNE_MEDIAREMOVED.

Используйте устройство ONDeviceNotify, если вы ищете аппаратное устройство, а не медиа-устройство, или вы можете написать собственный драйвер устройства.

См. код этого комментария CodeProject - Отлов сообщений windows

0
ответ дан 10 December 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: