如何开启/关闭显示器?

7
我希望能够从一个Delphi脚本中控制我的显示器的开关,从Windows XP到7。在stackoverflow的Delphi部分中搜索并没有找到答案。我还发现许多示例在Windows 7上不再起作用(仅适用于XP)。

1
在谷歌上搜索“从Delphi脚本打开/关闭我的显示器”的第一个结果几乎都列出了“你的”解决方案。 - Mat
我同意Mat的观点;我只是加上这个问题,因为我在stackoverflow上没有找到它(而且我已经阅读了这篇文章)。 - Whiler
1
我的 TSystemState 可以做到这一点。 - Andreas Rejbrand
1个回答

11

我已经在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; 但没有更好的结果! - Whiler
1
你可能需要使用PostMessage而不是SendMessage。 - tinman
1
不要将 WM_SYSCOMMAND 消息广播到所有窗口。只需将其发送到自己的一个窗口,然后通过默认处理程序运行该消息即可。如果您将其发送到所有窗口,则可能会将消息发送到以特殊方式处理 WM_SYSCOMMAND 的窗口,从而导致结果行为不可预测。 - In silico
1
@Whiler:没错。你只需要将消息发送到一个(自己的)窗口即可。只要 WM_SYSCOMMAND 参数正确,消息处理机制就会负责关闭监视器,而不需要你广播消息。 - In silico
好的,所以我从我的答案中删除了广播部分;o) - Whiler
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接