如何检测设备变动信息

一、处理设备变动信息

 

 可以在某个窗口类中使用WindowProc函数处理:

LRESULT CXXXDogDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{

    //wParam标识事件类型,如设备插入事件、拔出事件
    if(message == WM_DEVICECHANGE && (wParam ==  DBT_DEVICEARRIVAL || wParam == DBT_DEVICEREMOVECOMPLETE))     

    {
          PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;


           //lpdb->dbch_devicetype标识设备类型
          if(lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)   //此种类型需要注册,如Hid设备,只有注册了此处的代码才有作用
         {
               int  i = 0;   
               ++i;
         }
         else if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)  //逻辑卷,如U盘,不需要注册
        {
             int i = 0;  
             ++i;
       } 
 
   }

   return CDialog::WindowProc(message, wParam, lParam);
}

 

也可以映射消息:

ON_WM_DEVICECHANGE()

然后添加函数 :

OnDeviceChange    //此函可以处理不需要注册的消息,或者已经注册的消息

 

 

二、如何注册设备消息

     GUID GUID_CLASS_ITOKEN_Hid = {0};
     DEV_BROADCAST_DEVICEINTERFACE dbf;
     HDEVNOTIFY hDevNotify = NULL;

 
     typedef void (__stdcall *FUNC_TYPE_HIDGUID) (LPGUID);
     FUNC_TYPE_HIDGUID _HidD_GetHidGuid = NULL;

     HINSTANCE hMod = LoadLibrary(_T("hid.dll"));
    _HidD_GetHidGuid = (FUNC_TYPE_HIDGUID)GetProcAddress(hMod, "HidD_GetHidGuid");
     ASSERT(_HidD_GetHidGuid != NULL);
    _HidD_GetHidGuid(&GUID_CLASS_ITOKEN_Hid);   //获得Hid设备的GUID
     FreeLibrary(hMod);

 

     memset(&dbf, 0x00, sizeof(dbf));
     dbf.dbcc_size       = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
     dbf.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
     dbf.dbcc_classguid  = GUID_CLASS_ITOKEN_Hid;
     hDevNotify = RegisterDeviceNotification(m_hWnd, &dbf,DEVICE_NOTIFY_WINDOW_HANDLE);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值