当系统从睡眠状态苏醒时,我需要通过常规桌面程序(而不是服务)进行一些调整。我预计程序会收到 WM_POWERBROADCAST 消息,但从未收到此消息。
根据我如何知道 Windows 何时进入/退出睡眠或休眠模式?,此消息是预期的,没有任何先决条件。
使用 Visual Studio 生成的简单 Win32 程序在 Windows 11 上进行测试。刚刚添加到消息循环“case WM_POWERBROADCAST:”,它设置一些静态变量。从睡眠中醒来后,该变量保持不变。
你可以用Spy++验证一下:只有多个WM_DEVICECHANGE消息,加上0x02C8和0x02C9消息,以及重画消息。
解决方法是使用 GetTickCount64() 等方法不断轮询系统,并检测不活动的时间段。当然,最好避免轮询。
如果您对此有所了解,请告诉我我缺少什么!
您必须先注册才能收到 WM_POWERBROADCAST 消息。
看看注册电源事件,你会发现你需要调用RegisterPowerSettingNotification()才能获得WM_POWERBROADCAST。
RegisterSuspendResumeNotification()
。