Обработка WM_DEVICECHANGE
- См. http://lists.trolltech.com/qt-interest/2001-08/thread00698-0.html, как обрабатывать сообщения Windows в QT.
Если wParam равен DBT_DEVICEARRIVAL
, тогда приведите lParam к DEV_BROADCAST_HDR *
Если структуры dbch_devicetype
равны DBT_DEVTYP_VOLUME
, приведите lParam снова, на этот раз в DEV_BROADCAST_VOLUME *
. Теперь проверьте битовое поле dbcv_unitmask
, переберите биты 0..31 и проверьте, соответствует ли соответствующий приводВаш USB-накопитель.
if (wParam == DBT_DEVICEARRIVAL) {
if (((DEV_BROADCAST_HDR *) lParam)->dbch_devicetype == DBT_DEVTYP_VOLUME) {
DWORD Mask = ((DEV_BROADCAST_VOLUME *) lParam)->dbcv_unitmask;
for (int i = 0; i < 32; ++i) {
if (Mask & (1 << i)) {
char RootPath[4] = "A:\\";
RootPath[0] += i;
// Check if the root path in RootPath is your USB drive.
}
}
}
}