Delphi 如何打开/关闭显示器?

Delphi 如何打开/关闭显示器?,delphi,winapi,screen,power-management,Delphi,Winapi,Screen,Power Management,我希望能够从Delphi脚本,从windowsxp到7打开/关闭显示器 我在上的Delphi部分进行了搜索,没有找到答案 我还发现了许多在Windows 7上不再工作的示例(仅适用于XP)。我已在Windows XP和Windows 7上成功测试了这些示例: const MONITOR_ON = -1; MONITOR_OFF = 2; MONITOR_STANDBY = 1; 要关闭显示器,请执行以下操作: SendMessage(Application

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

我在上的Delphi部分进行了搜索,没有找到答案


我还发现了许多在Windows 7上不再工作的示例(仅适用于XP)。

我已在Windows XPWindows 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);
要打开显示器,请执行以下操作:

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

如果你知道为什么它会挂在广播上。。。我尝试了Application.ProcessMessages;没有更好的结果!您可能需要使用PostMessage而不是SendMessage。我只是测试一下!而且它有效!谢谢!我更新了答案的第二部分。不要向所有窗口广播
WM\u SYSCOMMAND
消息。只需将其发送到您自己的一个窗口,该窗口将通过默认处理运行消息。如果您将消息发送到所有窗口,那么您可能最终会将消息发送到一个以特殊方式处理
WM\u SYSCOMMAND
s的窗口,从而使结果行为不可预测。@Whiler:没错。您只需将消息发送到一个(您自己的)窗口。只要
WM_SYSCOMMAND
参数正确,消息处理机制将负责为您关闭监视器,而无需您广播消息。通过谷歌搜索“从Delphi脚本打开/关闭我的监视器”的第一个结果几乎列出了“您的”解决方案。我同意Mat;我之所以添加它,是因为我在stackoverflow上没有找到它(正如我所读到的)…我的工作就是这样做的。