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

Windows上,只有聚焦的应用程序通过WM_SYSCOMMAND消息( wParam设置为SC_MONITORPOWERlParam表示新的电源状态)接收显示电源事件。

在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?