在Windows上,只有焦点应用程序通过WM_SYSCOMMAND
消息接收显示电源事件(wParam
设置为SC_MONITORPOWER
,lParam
代表新电源状态。< / p>
在Windows Vista及更高版本中,可以使用RegisterPowerSettingNotification
GUID调用GUID_SESSION_DISPLAY_STATUS
函数,通知任何应用程序显示电源事件。
有没有办法在Windows XP上,在应用程序级别上实现相同的结果(即不使用在内核模式下运行的代码)?
答案 0 :(得分:2)
您需要做的就是处理WM_SYSCOMMAND
。我能想到的选择:
使用SetWindowsHookEx
(WH_CBT
)。
将DLL注入到挂钩CreateProcess并将其自身注入所有未来进程的每个进程中,实际上是挂钩整个系统。然后上述DLL将子类化当前进程中的所有窗口,您可以从那里处理WM_SYSMESSAGE
。
答案 1 :(得分:-1)
您是否只能在WindowProc中处理WM_POWERBROADCAST消息,一旦收到,请调用GetSystemPowerStatus?