【问题标题】:How to turn on/off the monitor(s)?如何打开/关闭显示器?
【发布时间】:2011-11-10 01:15:32
【问题描述】:

我希望能够从 Delphi 脚本,从 Windows XP 到 7打开/关闭我的显示器

我在 stackoverflowDelphi 部分中进行了搜索,但没有找到答案。

我还发现许多示例不再适用于 Windows 7(仅适用于 XP)。

【问题讨论】:

  • 谷歌搜索“从 Delphi 脚本打开/关闭我的显示器”的第一个结果几乎都列出了“你的”解决方案。
  • 我同意垫;我只是添加它,因为我没有在 stackoverflow 上找到它(并且我已经阅读了this)...
  • 我的TSystemState 会这样做。

标签: delphi winapi screen power-management


【解决方案1】:

我已在 Windows XP Windows 7 上成功测试:

const
  MONITOR_ON      = -1;
  MONITOR_OFF     =  2;
  MONITOR_STANDBY =  1;

要关闭显示器:

  SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);

打开显示器:

  SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON);

【讨论】:

  • 如果你知道为什么它会随着广播挂起......我试过 Application.ProcessMessages;没有更好的结果!
  • 您可能需要使用 PostMessage 而不是 SendMessage。
  • 我只是测试一下!它有效!非常感谢!我更新了答案的第二部分。
  • 不要将WM_SYSCOMMAND消息广播到所有窗口。只需将其发送到您自己的一个窗口,然后它应该通过默认处理运行消息。如果您将它发送到所有窗口,那么您最终可能会将消息发送到以特殊方式处理WM_SYSCOMMANDs 的窗口,从而使结果行为不可预测。
  • @Whiler:没错。您只需将消息发送到一个(您自己的)窗口。只要WM_SYSCOMMAND 参数正确,消息处理机制就会为您关闭监视器,而无需您广播消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
相关资源
最近更新 更多