Minimum supported client Windows 2000 Professional
Перед включением виндовых заголовков вставь
#define _WIN32_WINNT 0x0500
#define WINVER 0x0500
Использование функции -
Class::Class() : QWidget()
{
...
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
memset(&NotificationFilter, 0, sizeof(NotificationFilter));
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = MyGUID;
HDEVNOTIFY hDeviceNotify = RegisterDeviceNotification(winId(), &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
if(hDeviceNotify == NULL)
qWarning("Device autodetection won't be supported");
}
bool Class::winEvent(MSG *message, long *result)
{
if(message->message == WM_DEVICECHANGE)
{
switch(message->wParam)
{
case DBT_DEVICEARRIVAL:
case DBT_DEVICEREMOVECOMPLETE:
{
DEV_BROADCAST_HDR *hdr = reinterpret_cast<DEV_BROADCAST_HDR *>(message->lParam);
if(hdr && hdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
{ /* появился или удалился новый раздел, делаем свои чёрные делишки тут */ }
}
break;
}
}
return false;
}