怎么捕获非标准usb设备插入或拔出消息?

我用mfc开发,用OnDeviceChange(UINT nEventType,DWORD_PTR dwData)消息回调函数来处理消息,但是一个奇怪的问题就是某些非标准usb设备(比如一些电子钥匙),插入或拔出的时候始终只发送DBT_DEVNODES_CHANGED消息(即nEventType== 7),而且dwData始终为0;但是如果插入一些普通U盘,就可以截获到DBT_DEVICEARRIVAL、DBT_DEVICEREMOVECOMPLETE等消息。这是怎么回事那?
    另外,我想滤除其它usb设备插入与拔出时产生的DBT_DEVNODES_CHANGED消息,我该怎么办?一定要写过滤驱动程序吗?还有其它办法没有?
    多谢多谢!并祝愿大家十一和中秋双节快乐!

 

告诉你吧,这个得自己注册事件
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啦
上面的方法保证绝对可以,你慢慢调试吧
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值