在网上找了很久,发现这个方法还是可以实现的,但是必须要知道USB设备的GUID,我准备写下来留作以便以后查询
BOOL CXXdlg::OnDeviceChange(UINT nEventType,DWORD dwData)
{
DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*) dwData;
//这里进行信息匹配,比如guid等
//针对各个事件进行处理.
switch (nEventType)
{
case DBT_DEVICEREMOVECOMPLETE:
{
int i = 0;
}
break;
case DBT_DEVICEARRIVAL:
{
int j = 0;
}
break;
default:
break;
}
return TRUE;
}
在BEGIN_MESSAGE_MAP中增加
ON_WM_DEVICECHANGE()
在OnInitDialog中注册设备
static const GUID GUID_DEVINTERFACE_LSIT[] =
{
//GUID_DEVINTERFACE_USB_DEVICE
{0X36FC9E60,0xC465,0X11CF,{0X80,0X56,0X44,0X45,0X53,0X54,0X00,0X00}},
//GUID_DEVINTERFACE_DISK
{0X53F56307,0XB6BF,0X11D0,{0X94,0XF2,0X00,0XA0,0XC9,0X1E,0XFB,0X8B}},
//GUID_DEVINTERFACE_HID
{0X4D1E55B2,0XF16F,0X11CF,{0X88,0XCB,0X00,0X11,0X11,0X00,0X00,0X30}},
//GUID_NDIS_LAN_CLASS
{0XAD498944,0X762F,0X11D0,{0X8D,0XCB,0X00,0X00,0X4F,0XC3,0X35,0X8C}}
};
DEV_BROADCAST_DEVICEINTERFACE DevInt;
memset(&DevInt,0,sizeof(DEV_BROADCAST_DEVICEINTERFACE));
DevInt.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
DevInt.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
for (int i=0;i<sizeof(GUID_DEVINTERFACE_LSIT)/sizeof(GUID);i++)
{
DevInt.dbcc_classguid = GUID_DEVINTERFACE_LSIT[i];//usb设备的GUID
RegisterDeviceNotification(this->m_hWnd,&DevInt, DEVICE_NOTIFY_ALL_INTERFACE_CLASSES);
}
在xx.h
afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData);