2

基于 Win7 的信息亭,职员可访问的开关关闭显示器电源,我的任务是检测到这一点,并根据其他因素进行有序关机或关机/重启或什么都不做。如果我对物理设计有任何意见,我会以不同的方式做事,但是……这是我必须处理的。我发现了几种不同的方法,它们应该可以检测到显示器是否已关闭,但它们都没有奏效。我更愿意发送一个事件而不是每秒轮询一次。

  1. 即使显示器关闭,Screen.AllScreens.Length 也会继续返回 1。
  2. SystemEvents.DisplaySettingsChanged 不会被调用。
  3. SystemEvents.PowerModeChanged 不会被调用。
  4. 带有 GUID_SESSION_DISPLAY_STATUS 的 RegisterPowerSettingNotification 不会产生任何消息(但后来我发现一些东西让我认为直到 Windows 8 才支持 GUID_SESSION_DISPLAY_STATUS - 对吗?)。
  5. 带有 GUID_MONITOR_POWER_ON 的 RegisterPowerSettingNotification 在我启动时给我一条消息,但在显示器关闭时(也不在显示器重新打开电源时)不给我 WM_POWERBROADCAST 消息。我对此寄予厚望,因为 MS doc 实际上说“显示器是由用户或系统的屏幕黑屏功能打开或关闭 的。” 这是在“移动 PC”部分,我们是操作系统的桌面版本,所以它可能不适用于我们?

检测显示器已关闭的任何其他想法?还是常见的陷阱使它看起来不起作用,这可能会影响我的测试?

我是否必须弄清楚如何说 VESA DDC(来自 C#)?我想我需要弄清楚的是如何发送一个有效的命令——任何响应都意味着监视器是打开的,没有响应意味着它是关闭的。

4

0 回答 0