今天热门
热点:

xp环境获取USB设备的插入与拔出事件,xpusb


vs2003,当插入HID类型的USB设备,如USB键盘,扫描枪时,能获取到相应的通知,比如插入与拔除。
我在WIN7里面运行良好,可以正常获得相应通知。

但XP里面,当得到WM_DEVICEDHANGE消息后,事件类型参数始终为7。并没有我想要的DBT_DEVICEARRIVAL。代码如下:


bool registerDevice(HWND hWnd)
{
//注册插拔事件
HDEVNOTIFY hDevNotify;
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) );
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE/*DBT_DEVTYP_DEVICEINTERFACE*/;
HidD_GetHidGuid(&GUID_CLASS_I82930_ISO);

char szGuid[128];
memset(szGuid,'\0',128);
sprintf(szGuid,"hid device of guid:%08X%04X%04X%02X%02X%02X%02X%02X%02X%02X%02X",GUID_CLASS_I82930_ISO.Data1,GUID_CLASS_I82930_ISO.Data2,GUID_CLASS_I82930_ISO.Data3  
,   GUID_CLASS_I82930_ISO.Data4[0],   GUID_CLASS_I82930_ISO.Data4[1]  
,   GUID_CLASS_I82930_ISO.Data4[2],   GUID_CLASS_I82930_ISO.Data4[3],   GUID_CLASS_I82930_ISO.Data4[4],   GUID_CLASS_I82930_ISO.Data4[5]  
,   GUID_CLASS_I82930_ISO.Data4[6],   GUID_CLASS_I82930_ISO.Data4[7] ) ;


MessageBox(NULL, szGuid, "test", MB_OK);
NotificationFilter.dbcc_classguid = GUID_CLASS_I82930_ISO;
if (!::IsWindow(hWnd))
{
MessageBox(NULL, szGuid, "IsWindow() return false", MB_OK);
return false;
}
hDevNotify = RegisterDeviceNotification(hWnd, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
if( !hDevNotify ) 
{
MessageBox(NULL, "register device notify event failed.", "test", MB_OK);
return false;
}
else
{
MessageBox(NULL, "register device notify event success.", "test", MB_OK);
return true;
}
}


以上为注册函数,在程序启动开始就会注册,XP环境里面也显示注册成功了。
以下为消息处理函数:

BOOL CtestScanDlg::OnDeviceChange(UINT nEventType,DWORD dwData)
{
   DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*) dwData;

   //这里进行信息匹配,比如guid等
   char buf[128] = {0};
   sprintf(buf, "nEventType:%d", nEventType);
   MessageBox(buf, "test", MB_OK);
//针对各个事件进行处理.
if (nEventType == DBT_DEVICEARRIVAL)
{
MessageBox("check the usb hid device is insert.");
if (dbd)
{
OutputDebugString("here...\r\n");
}
}
return true;
}

解决方案

GUID_CLASS_I82930_ISO 这个值是多少。。

WM_DEVICEDHANGE
自己创建窗口,消息循环中去捕获WM_DEVICEDHANGE消息
用这种方式实现

GUID_CLASS_I82930_ISO 这种设备在XP上支持吗?是否需要安装驱动?
不妨使用CxDeviceFind设备查找类
http://www.cnblogs.com/EdmundDwyane/p/3187226.html

www.zrccd.nettrue/topics/20180106/6321.htmlTechArticlexp环境获取USB设备的插入与拔出事件,xpusb vs2003,当插入HID类型的USB设备,如USB键盘,扫描枪时,能获取到相应的通知,比如插入与拔除。 我在WIN7里面运行良好,可以正常获得相应通知...

相关文章

    暂无相关文章

用户评论

大家都在看