【问题标题】:How to detect when a device is added to the system?如何检测何时将设备添加到系统中?
【发布时间】:2010-07-14 19:21:31
【问题描述】:

这个问题我已经有一段时间了,但我必须解决它,因为我现在必须解决它。我试图检测设备何时连接到 Windows 7 中的系统并且我收到 WM_DEVICECHANGE 就好了,但是 wParam 中的消息始终是 DBT_DEVNODES_CHANGED。从不使用 DBT_DEVICEARRIVAL 或 DBT_DEVICEREMOVECOMPLETE。到目前为止,我没有运气在谷歌上搜索,所以我希望有人能在我在几个小时内找到东西之前指出我正确的方向:) 谢谢你的时间。

【问题讨论】:

    标签: c# winapi qt mfc


    【解决方案1】:

    文档指出默认情况下应接收 DBT_DEVICEARRIVAL 和 DBT_DEVICEREMOVECOMPLETE 事件。应用程序可以通过调用 RegisterDeviceNotification 函数注册以接收更详细的事件。希望您在注册应用程序后会收到所需的事件。请务必在关闭时调用 UnregisterDeviceNotification。

    RegisterDeviceNotification 参考:

    http://msdn.microsoft.com/en-us/library/aa363431%28v=VS.85%29.aspx

    P/调用签名:

    http://pinvoke.net/default.aspx/user32.RegisterDeviceNotification

    UnregisterDeviceNotification 参考:

    http://msdn.microsoft.com/en-us/library/aa363475%28v=VS.85%29.aspx

    P/调用签名:

    http://pinvoke.net/default.aspx/user32.UnregisterDeviceNotification

    【讨论】:

      【解决方案2】:

      非常感谢弗莱彻。我已经成功地为 Qt4 做到了这一点。 Qt4(.6.3) 用户可以正常添加#include 文件,但您需要在.h 文件中添加一些#defines

      #define _WIN32_WINNT 0x0501
      #define _WIN32_WINDOWS 0x0501
      #define WINVER 0x0501
      

      以便可以识别像DEV_BROADCAST_HEADER 这样的Windows 数据类型。我猜的版本号也取决于您的 Windows 平台,但不确定(我使用的是 win 7 atm)。 另外不要忘记将库添加到您的 .pro 文件中 LIBS += "C:\Qt\2010.04\mingw\lib\<library_file>" 如果你安装在默认位置,那就是。

      【讨论】:

        猜你喜欢
        • 2011-03-25
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 2016-09-29
        • 1970-01-01
        相关资源
        最近更新 更多