Windows下如何实现监听U盘的弹出事件



  • 最近遇到一个难题——在Windows下用Qt实现U盘弹出、插入、拔出的监听。之前没有相关处理经验,于是一顿搜索,找到如下方案,但仅能监听到U的插入、拔出事件,对U盘的弹出(U盘盘符|右键|弹出)无法监听到:

    bool Widget::nativeEvent(const QByteArray &eventType, void *message, long *result)
    {
        //处理Windows系统消息
       MSG* msg = (MSG*)message;
    
       int msgType = msg->message;
       if(msgType == WM_DEVICECHANGE) //Windows设备消息
       {
           PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)msg->lParam;
           switch(msg->wParam)
           {
           case DBT_DEVICEARRIVAL:
               if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME) //逻辑卷
               {
                   PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
                   if (lpdbv -> dbcv_flags == 0)
                   {
                       qDebug() << "USB_设备物理插入";
                   }
               }
               break;
           case DBT_DEVICEREMOVECOMPLETE:
               if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME) //逻辑卷
               {
                   PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
                   if (lpdbv -> dbcv_flags == 0)
                   {
                       qDebug() << "USB_设备物理拔出";
                   }
               }
               break;
           }
       }
       return false;
    }
    

    对于msg->wParam消息参数中的其它类型分别都测试过,没有一个是用于标记“U盘弹出”的消息事件,参数类型列举如下:

     DBT_DEVICEREMOVEPENDING
     DBT_CONFIGCHANGECANCELED
     DBT_CUSTOMEVENT
     DBT_DEVICEQUERYREMOVE
     DBT_DEVICEQUERYREMOVEFAILED
     DBT_DEVNODES_CHANGED
     DBT_QUERYCHANGECONFIG
     DBT_USERDEFINED
    

    在此求助有过相关处理经验或资料的同仁提供解决思路或者方案,谢谢!





  • 仔细看了您提供的链接,立面的解决方法还是没能解决我目前遇到的问题,也只能处理U盘的热插拔消息,使用菜单邮件弹出U盘的消息还是没能找到。



  • @crazyCpp 难道只有用虚拟磁盘服务的事件接口了吗?感觉不太熟悉嘞,一般的文件系统事件也不能监听到?


 

最近的回复

  • @jiangcaiyang 如果需要自动化测试,也用的上

    阅读更多
  • @青山白云 这个可能有点用,但是可能更多局限于爬虫领域吧。

    阅读更多
  • https://blog.csdn.net/huilan_same/article/details/51896672

    python制作爬虫时候使用selenium进行自动化
    使用chromedriver时候需要对应版本

    chromedriver版本 支持的Chrome版本 v2.39 v66-68 v2.38 v65-67 v2.37 v64-66 v2.36 v63-65 v2.35 v62-64 v2.34 v61-63 v2.33 v60-62 v2.32 v59-61 v2.31 v58-60 v2.30 v58-60 v2.29 v56-58 v2.28 v55-57 v2.27 v54-56 v2.26 v53-55 v2.25 v53-55 v2.24 v52-54 v2.23 v51-53 v2.22 v49-52 v2.21 v46-50 v2.20 v43-48 v2.19 v43-47 v2.18 v43-46 v2.17 v42-43 v2.13 v42-45 v2.15 v40-43 v2.14 v39-42 v2.13 v38-41 v2.12 v36-40 v2.11 v36-40 v2.10 v33-36 v2.9 v31-34 v2.8 v30-33 v2.7 v30-33 v2.6 v29-32 v2.5 v29-32 v2.4 v29-32 查谷歌浏览器版本

    地址栏输入chrome://settings/help

    0_1528459921154_16bbaf4d-0e8e-42cd-9e52-f8fc43932871-image.png

    所有chromedriver均可在下面链接中下载到:

    http://chromedriver.storage.googleapis.com/index.html

    阅读更多
  • 0_1528166192946_20180605_103351.gif

    源代码

    Fork me on Gitee

    阅读更多

关注我们

微博
QQ群











召唤伊斯特瓦尔