我已经有这个问题已经有一段时间但我必须补救它,因为我现在必须解决它。我正在尝试检测设备何时连接到Windows 7中的系统并且我收到WM_DEVICECHANGE就好了,但是wParam中的消息始终是DBT_DEVNODES_CHANGED。从来没有DBT_DEVICEARRIVAL或DBT_DEVICEREMOVECOMPLETE。到目前为止我没有运气谷歌搜索所以我希望有人会指出我在正确的方向,然后我会在几个小时内找到一些东西:) 谢谢你的时间。
答案 0 :(得分:1)
文档指出默认情况下应该接收DBT_DEVICEARRIVAL和DBT_DEVICEREMOVECOMPLETE事件。应用程序可以通过调用RegisterDeviceNotification函数进行注册以接收更详细的事件。希望您在注册应用程序后收到所需的活动。务必在关闭时调用UnregisterDeviceNotification。
RegisterDeviceNotification reference:
http://msdn.microsoft.com/en-us/library/aa363431%28v=VS.85%29.aspx
P / Invoke签名:
http://pinvoke.net/default.aspx/user32.RegisterDeviceNotification
UnregisterDeviceNotification参考:
http://msdn.microsoft.com/en-us/library/aa363475%28v=VS.85%29.aspx
P / Invoke签名:
http://pinvoke.net/default.aspx/user32.UnregisterDeviceNotification
答案 1 :(得分:0)
非常感谢弗莱彻。我已经成功地为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>"
。