Hmm..
Bis Windows 7 konnte man die Monitore mit einem SendMessage Ausschalten und wieder Einschalten.
Ab Windows 8 funktioniert nur noch das Ausschalten per SendMessage.
Um ab Windows 8 die Monitore einzuschalten genügt jedoch ein MouseMove:
Delphi-Quellcode:
{
// Special HWND value for use with PostMessage() and SendMessage()
HWND_BROADCAST = $FFFF;
WM_SYSCOMMAND = $0112;
SC_MONITORPOWER = $F170
}
const
MONITOR_ON = -1; // Monitor Wake up
MONITOR_OFF = 2; // Monitor Shut down
MONITOR_STANDBY = 1; // Monitor Standby
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF); // Monitor Shut down
// SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_STANDBY); // Monitor Standby
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
// SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON); // Monitor Wake up
Wake;
end;
procedure TForm1.Wake;
begin
mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, 0);
mouse_event(MOUSEEVENTF_MOVE, 0, 0, 0, 0);
end;
(Getestet mit Win7 / Win10 / Win11)