如何检测设备何时添加到系统?

问题描述:

我已经有一段时间了这个问题,但我必须纠正它,因为我现在必须解决它。我试图检测设备何时连接到Windows 7系统,我收到WM_DEVICECHANGE就好了,但wParam中的消息总是DBT_DEVNODES_CHANGED。从来没有DBT_DEVICEARRIVAL或DBT_DEVICEREMOVECOMPLETE。我到目前为止没有运气Google搜索,所以我希望有人会指出我在正确的方向,然后在几个小时内找到东西:) 感谢雅时间。如何检测设备何时添加到系统?

该文档指出应默认接收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/Invoke签名:

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

非常感谢弗莱彻。我已经成功为Qt4做这个工作。 Qt4的(.6.3)用户可以添加#include文件作为正常的,但你将需要一些#defines添加到您的.h文件中:

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

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