【问题标题】:Monitoring display power events on Windows XP在 Windows XP 上监控显示器电源事件
【发布时间】:2012-03-10 23:04:30
【问题描述】:

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

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

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

【问题讨论】:

  • 驱动程序收到电源事件通知。
  • @BenVoigt:我正在寻找更直接的应用程序级别...

标签: windows winapi windows-xp


【解决方案1】:

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

  • 为此使用SetWindowsHookEx(使用WH_CBT)。

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

【讨论】:

  • @Jonathan Lingle:WM_SYSMESSAGE 不存在。你的意思是WM_SYSCOMMAND
  • @Lorenzo:是的,那是一个错字。我的错。
【解决方案2】:

你不能在你的 WindowProc 中处理 WM_POWERBROADCAST 消息,一旦收到,就调用 GetSystemPowerStatus 吗?

【讨论】:

猜你喜欢
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多