Call WM_DEVICECHANGE from any window handle, registering for device change notifications. Thus:
DEV_BROADCAST_DEVICEINTERFACE dbd = { sizeof(dbd) }; dbd.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; dbd.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE; RegisterDeviceNotification(hwnd, &dbd, DEVICE_NOTIFY_WINDOW_HANDLE);
lParam WM_DEVICECHANGE can be passed to DBT_DEVTYP_DEVICEINTERFACE. Note. When you connect the device, you can receive several WM_DEVICECHANGE notifications. Just filter the arrival event and ignore duplicates.
LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(hwnd) { case WM_DEVICE_CHANGE: { PDEV_BROADCAST_HDR pHdr = NULL; PDEV_BROADCAST_DEVICEINTERFACE pDev = NULL; pHdr = (PDEV_BROADCAST_HDR)lParam; bool fDeviceArrival = (wParam == DBT_DEVICEARRIVAL); if (fDeviceArrival) { if (pHdr && (pHdr->dbch_devicetype==DBT_DEVTYP_DEVICEINTERFACE)) { pDev = (PDEV_BROADCAST_DEVICEINTERFACE)lParam; } if (pDev && (pDev->dbcc_classguid == GUID_DEVINTERFACE_USB_DEVICE)) {
source share