我希望能够从一个Delphi脚本中控制我的显示器的开关,从Windows XP到7。在stackoverflow的Delphi部分中搜索并没有找到答案。我还发现许多示例在Windows 7上不再起作用(仅适用于XP)。
我已经在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);
WM_SYSCOMMAND
消息广播到所有窗口。只需将其发送到自己的一个窗口,然后通过默认处理程序运行该消息即可。如果您将其发送到所有窗口,则可能会将消息发送到以特殊方式处理 WM_SYSCOMMAND
的窗口,从而导致结果行为不可预测。 - In silicoWM_SYSCOMMAND
参数正确,消息处理机制就会负责关闭监视器,而不需要你广播消息。 - In silico
TSystemState
可以做到这一点。 - Andreas Rejbrand