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

lor*_*ova 8 windows winapi windows-xp

在Windows上,只有焦点应用程序通过WM_SYSCOMMAND消息接收显示电源事件(wParam设置为SC_MONITORPOWER,并lParam表示新的电源状态).

在Windows Vista及更高版本中,可以使用GUID 通过调用该函数来通知任何应用程序显示电源事件.RegisterPowerSettingNotificationGUID_SESSION_DISPLAY_STATUS

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

小智 2

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

  • 用于SetWindowsHookEx此目的(与WH_CBT)。

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