再会!我编写了一个 Windows 服务,它检测 USB 闪存驱动器连接并对连接的驱动器执行某些操作。现在经过测试,我需要在从睡眠模式唤醒后重新处理设备。当服务作为 Windows 程序工作时,我解决了这个问题。为了解决这个问题,我另外处理了DBT_DEVNODES_CHANGED,但服务没有收到此消息,它只收到DBT_DEVICE_ARRIVAL和DBT_DEVICEREMOVECOMPLETE。我还尝试检查服务处理的所有消息,除非  SERVICE_CONTROL_DEVICEEVENT系统SERVICE_CONTROL_STOP要休眠并且我没有收到任何消息。
如何确定系统何时唤醒?
普通应用程序会收到WM_POWERBROADCAST:PBT_APMRESUMEAUTOMATIC窗口消息,但如果服务没有窗口,则不会收到此消息。但是,服务可以SERVICE_CONTROL_POWEREVENT在其HandlerEx回调函数中接收与以下内容相同的参数:WM_POWERBROADCAST
通知系统电源事件的服务。dwEventType 参数包含附加信息。如果 dwEventType 为 PBT_POWERSETTINGCHANGE,则 lpEventData 参数还包含附加信息。
在 Windows 8 及更高版本上,您还可以使用该PowerRegisterSuspendResumeNotification()函数:
注册以在系统挂起或恢复时接收通知。
相当于的服务WM_DEVICECHANGE是SERVICE_CONTROL_DEVICEEVENT:
通知设备事件的服务。(该服务必须已使用RegisterDeviceNotification函数注册才能接收这些通知。)dwEventType 和 lpEventData 参数包含附加信息。