我用mfc开发,用OnDeviceChange(UINT nEventType,DWORD_PTR dwData)消息回调函数来处理消息,但是一个奇怪的问题就是某些非标准usb设备(比如一些电子钥匙),插入或拔出的时候始终只发送DBT_DEVNODES_CHANGED消息(即nEventType== 7),而且dwData始终为0;但是如果插入一些普通U盘,就可以截获到DBT_DEVICEARRIVAL、DBT_DEVICEREMOVECOMPLETE等消息。这是怎么回事那?
另外,我想滤除其它usb设备插入与拔出时产生的DBT_DEVNODES_CHANGED消息,我该怎么办?一定要写过滤驱动程序吗?还有其它办法没有?
多谢多谢!并祝愿大家十一和中秋双节快乐!
另外,我想滤除其它usb设备插入与拔出时产生的DBT_DEVNODES_CHANGED消息,我该怎么办?一定要写过滤驱动程序吗?还有其它办法没有?
多谢多谢!并祝愿大家十一和中秋双节快乐!
解决方案 »
- 请教 关于 SetCapture ()函数
- 在webbrowser中如何截获将要POST出去的数据,如何拦截住该请求?
- 请问CComboBox的一个问题
- 有人用过console application做过exe程序,实现数据库的寸取的功能么?
- 用WIN32 Dynamic-Link Library建了一个工程,为什么在里面不能用CTime类,请高手指教!!!!
- 请问怎么判断Client端是lowid还是highid
- 文件分割器分割文件时产生的一个exe文件(用于自动将分割的文件重组)是怎样实现的?欢迎大家进来讨论
- Dll的疑惑?高手请进.....
- strip(阿飞) 请进!!!
- 问写概念上的问题,
- 如何获取系统的"日期/时间 属性"句柄
- 高手急救,奇怪的问题关于CEDIT ---在线等待
BOOL CRSDlg::DoRegisterDeviceInterface(GUID InterfaceClassGuid, HDEVNOTIFY *hDevNotify)
{
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
DWORD Err; ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) );
NotificationFilter.dbcc_size = 32;
// sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = InterfaceClassGuid; *hDevNotify = RegisterDeviceNotification(GetSafeHwnd(), &NotificationFilter,
DEVICE_NOTIFY_WINDOW_HANDLE );
if(!*hDevNotify)
{
Err = GetLastError();
CString str;
str.Format(_T("RegisterDeviceNotification failed: %lx."),Err);
DT((LPCSTR)str);
return FALSE;
}
DT("RegisterDeviceNotification Successed :)");
//UnregisterDeviceNotification(*hDevNotify);
return TRUE;
}至于InterfaceClassGuid这个参数,你得在你的驱动文件中查看它的guid啦
上面的方法保证绝对可以,你慢慢调试吧下次记得给点数,不然不回答啦