再会!我编写了一个 Windows 服务,它检测 USB 闪存驱动器连接并对连接的驱动器执行某些操作。现在经过测试,我需要在从睡眠模式唤醒后重新处理设备。当服务作为 Windows 程序工作时,我解决了这个问题。为了解决我另外处理DBT_DEVNODES_CHANGED
,但是服务不会收到此消息,它只收到DBT_DEVICE_ARRIVAL
and DBT_DEVICEREMOVECOMPLETE
。我还尝试检查服务处理的所有消息,除了SERVICE_CONTROL_DEVICEEVENT
and SERVICE_CONTROL_STOP
当系统进入睡眠状态时我没有收到任何消息。
如何确定系统何时唤醒?
正常的应用程序会收到一个WM_POWERBROADCAST:PBT_APMRESUMEAUTOMATIC
窗口消息,但如果服务没有窗口,则不会收到此消息。但是,服务可以接收SERVICE_CONTROL_POWEREVENT
in its HandlerEx https://msdn.microsoft.com/en-us/library/windows/desktop/ms683241(v=vs.85).aspx回调函数,参数相同WM_POWERBROADCAST
通知系统电源事件的服务。 dwEventType 参数包含附加信息。如果 dwEventType 为 PBT_POWERSETTINGCHANGE,则 lpEventData 参数还包含附加信息。
在 Windows 8 及更高版本上,您还可以使用PowerRegisterSuspendResumeNotification() https://msdn.microsoft.com/en-us/library/windows/desktop/hh769080(v=vs.85).aspx功能:
注册以在系统挂起或恢复时接收通知。
服务相当于WM_DEVICECHANGE
is SERVICE_CONTROL_DEVICEEVENT
:
通知设备事件的服务。 (该服务必须已注册才能使用注册设备通知 https://msdn.microsoft.com/en-us/library/windows/desktop/aa363431(v=vs.85).aspx函数。) dwEventType 和 lpEventData 参数包含附加信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)