在Windows上,只有聚焦的应用程序通过WM_SYSCOMMAND
消息( wParam
设置为SC_MONITORPOWER
, lParam
表示新的电源状态)接收显示电源事件。
在Windows Vista和更高版本中,可以使用GUID_SESSION_DISPLAY_STATUS
GUID通过调用RegisterPowerSettingNotification
函数来向任何应用程序通知显示器电源事件。
有没有办法在应用程序级别(即不使用在内核模式下运行的代码)在Windows XP上实现相同的结果?
所有你需要做的是处理WM_SYSCOMMAND
。 我能想到的选项:
使用SetWindowsHookEx
(与WH_CBT
)。
将DLL注入到每个挂钩CreateProcess的进程中,并将其注入到所有将来的进程中,实质上挂钩整个系统。 上述DLL将WM_SYSMESSAGE
当前进程中的所有窗口,并且可以从那里处理WM_SYSMESSAGE
。
你不能只处理你的WindowProc中的消息WM_POWERBROADCAST,一旦收到,调用GetSystemPowerStatus?