美好的一天!我编写了一个 Windows 服务,它检测 USB 闪存驱动器连接并对连接的驱动器执行某些操作。现在经过测试,我需要在从 sleep 模式唤醒后重新处理设备。当服务作为 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
Notifies a service of system power events. The dwEventType parameter contains additional information. If dwEventType is PBT_POWERSETTINGCHANGE, the lpEventData parameter also contains additional information.
在 Windows 8 及更高版本上,您还可以使用 PowerRegisterSuspendResumeNotification()
功能:
Registers to receive notification when the system is suspended or resumed.
相当于 WM_DEVICECHANGE
的服务是 SERVICE_CONTROL_DEVICEEVENT
:
Notifies a service of device events. (The service must have registered to receive these notifications using the RegisterDeviceNotification function.) The dwEventType and lpEventData parameters contain additional information.
关于c++ - 如何在Windows服务中检测从 sleep 模式唤醒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47942716/