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 难道只有用虚拟磁盘服务的事件接口了吗?感觉不太熟悉嘞,一般的文件系统事件也不能监听到?


 

走马观花

最近的回复

  • QQ.png

    read more
  • 原来的号上不去了。。。。。不知道咋回事,可能是Github登录的?
    这个项目时隔3年又更新了,虽然偷了很多懒。。。。

    虽然这几年我一直编译Qt,不过已经很少编译这么全套的了。。。。。

    read more
  • 第一就是进入体验期:就是网友们刚刚进入网站的时候,心态处于体验状态,自然不会充值大额,所以这个阶段提款就是正常的,不会有什么情况。第二就是网站考量期:这个阶段是网友们已经玩了一段时间了,网站就会通过网友们这些天的投注情况来考量这个客户的质量,假如是大客户的话,那你就算赢十个八个网站还是会给你提款的,因为你后面还可以给网站带来更大的利益。第三就是网站拖延期,这个阶段就是网站决定黑你但是还想让你继续充值继续玩的时候,网站会以你的IP异常,注单违规,涉嫌套利等为借口拖着就是不给你提款。第四就是网站黑钱期,这个阶段就是网站觉得你身上的利益已经被他们套光了,网站也就不想在你身上浪费时间了,所以就冻结你的账号然后拉黑你。

    在这里我想说的是,如果我们的账号还没有到网站黑钱的最后一个阶段,只是出款需要审核,总是提不了款,但账号还可以正常登录,额度可以正常转换的时候可以寇+(二二其....久连连..六舞二桑)没有前期

    read more

关注我们

微博
QQ群











召唤伊斯特瓦尔