关于WM_DEVICECHANGE事件的触发问题

dccrazyboy 2009-10-02 02:13:34
在拔出USB鼠标时,发出一次消息,这个正常。
但在插入USB鼠标时,居然发出了4次消息,请问这是怎么回事,怎样避免啊?
...全文
314 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dccrazyboy 2009-10-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tr0j4n 的回复:]
RegisterDeviceNotification看看

估计你那样得到的是垃圾信息,多次WM_DEVICECHANGE而且wparam都一样
[/Quote]
哦,我去试试
MoXiaoRab 2009-10-02
  • 打赏
  • 举报
回复
一般是这么做的

常用的做法是:

DEV_BROADCAST_DEVICEINTERFACE       broadcastInterface;   
broadcastInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
broadcastInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;

memcpy( &(broadcastInterface.dbcc_classguid),
&(GUID_CLASS_USB_DEVICE), // 你自己UsbKey的GUID
sizeof(struct _GUID));
gNotifyDevHandle = RegisterDeviceNotification(
this->GetSafeHwnd( ), &broadcastInterface, DEVICE_NOTIFY_WINDOW_HANDLE);



  void   CUsbCheckDlg::OnDeviceChange(   UINT   nEventType,   DWORD   dwData   )   
{
switch (nEventType)
{
case DBT_DEVICEARRIVAL:
break;
case DBT_DEVICEREMOVECOMPLETE:
break;
}
}
MoXiaoRab 2009-10-02
  • 打赏
  • 举报
回复
RegisterDeviceNotification看看

估计你那样得到的是垃圾信息,多次WM_DEVICECHANGE而且wparam都一样
dccrazyboy 2009-10-02
  • 打赏
  • 举报
回复
我用的是MFC中的那个函数,只有两个参数啊
afx_msg BOOL CLock::OnDeviceChange( UINT nEventType,DWORD_PTR dwData )
我判断的是nEventType == 7 也就是是否等于DBT_DEVNODES_CHANGED。
另一个参数dwData总是0,并且根据MSDN看,这个参数也总是0啊?
StarsunYzL 2009-10-02
  • 打赏
  • 举报
回复
检查wParam的值,收到的4次消息wParam应该是不一样的吧,检查处理你想要的。
wParam能取的值请看MSDN

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧