监视Windows XP上的显示器电源事件

时间:2012-02-20 15:48:11

标签: windows winapi windows-xp

在Windows上,只有焦点应用程序通过WM_SYSCOMMAND消息接收显示电源事件(wParam设置为SC_MONITORPOWERlParam代表新电源状态。< / p>

在Windows Vista及更高版本中,可以使用RegisterPowerSettingNotification GUID调用GUID_SESSION_DISPLAY_STATUS函数,通知任何应用程序显示电源事件。

有没有办法在Windows XP上,在应用程序级别上实现相同的结果(即不使用在内核模式下运行的代码)?

2 个答案:

答案 0 :(得分:2)

您需要做的就是处理WM_SYSCOMMAND。我能想到的选择:

  • 使用SetWindowsHookExWH_CBT)。

  • 将DLL注入到挂钩CreateProcess并将其自身注入所有未来进程的每个进程中,实际上是挂钩整个系统。然后上述DLL将子类化当前进程中的所有窗口,您可以从那里处理WM_SYSMESSAGE

答案 1 :(得分:-1)

您是否只能在WindowProc中处理WM_POWERBROADCAST消息,一旦收到,请调用GetSystemPowerStatus?