[英]How to detect wake up from sleep mode in windows service?
美好的一天! 我编写了一个Windows服务,该服务可检测USB闪存驱动器的连接,并对连接的驱动器执行某些操作。 现在经过测试后,我需要从睡眠模式唤醒后重新处理设备。 当服务作为Windows程序工作时,我解决了这个问题。 为了解决这个问题,我还要处理DBT_DEVNODES_CHANGED
,但是服务没有收到此消息,它仅接收DBT_DEVICE_ARRIVAL
和DBT_DEVICEREMOVECOMPLETE
。 当系统进入睡眠状态并且我没有收到任何消息时,我还尝试检查由服务处理的所有消息,但SERVICE_CONTROL_DEVICEEVENT
和SERVICE_CONTROL_STOP
除外。
如何确定系统何时醒来?
普通应用程序会收到WM_POWERBROADCAST:PBT_APMRESUMEAUTOMATIC
窗口消息,但是如果服务没有窗口,服务将不会收到此消息。 但是,服务可以在其HandlerEx
回调函数中接收SERVICE_CONTROL_POWEREVENT
,其参数与WM_POWERBROADCAST
相同
通知服务系统电源事件。 dwEventType参数包含其他信息。 如果dwEventType为PBT_POWERSETTINGCHANGE,则lpEventData参数还包含其他信息。
在Windows 8和更高版本上,您还可以使用PowerRegisterSuspendResumeNotification()
函数:
注册以在系统挂起或恢复时接收通知。
WM_DEVICECHANGE
的服务等效项是SERVICE_CONTROL_DEVICEEVENT
:
通知服务设备事件。 (该服务必须已注册才能使用RegisterDeviceNotification函数接收这些通知。)dwEventType和lpEventData参数包含其他信息。
检测系统正在唤醒的最佳方法是过程电源消息。 Windows必须处理WM_POWERBROADCAST
服务必须将SERVICE_ACCEPT_POWEREVENT
添加到对SetServiceStatus
最后一次调用并处理SERVICE_CONTROL_POWEREVENT
我的错误非常愚蠢。 我忘记添加SERVICE_ACCEPT_POWEREVENT
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.