如何通过常规Win32程序检测系统刚刚从睡眠状态出来

问题描述 投票:0回答:1

当系统从睡眠状态苏醒时,我需要通过常规桌面程序(而不是服务)进行一些调整。我预计程序会收到 WM_POWERBROADCAST 消息,但从未收到此消息。

根据我如何知道 Windows 何时进入/退出睡眠或休眠模式?,此消息是预期的,没有任何先决条件。

使用 Visual Studio 生成的简单 Win32 程序在 Windows 11 上进行测试。刚刚添加到消息循环“case WM_POWERBROADCAST:”,它设置一些静态变量。从睡眠中醒来后,该变量保持不变。

你可以用Spy++验证一下:只有多个WM_DEVICECHANGE消息,加上0x02C8和0x02C9消息,以及重画消息。

解决方法是使用 GetTickCount64() 等方法不断轮询系统,并检测不活动的时间段。当然,最好避免轮询。

如果您对此有所了解,请告诉我我缺少什么!

c++ winapi
1个回答
3
投票

您必须先注册才能收到 WM_POWERBROADCAST 消息。

看看注册电源事件,你会发现你需要调用RegisterPowerSettingNotification()才能获得WM_POWERBROADCAST。

更新:还有

RegisterSuspendResumeNotification()

© www.soinside.com 2019 - 2024. All rights reserved.