Thema: Delphi Monitor einschalten

Einzelnen Beitrag anzeigen

HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
994 Beiträge
 
Delphi 6 Professional
 
#15

AW: Monitor einschalten

  Alt 15. Okt 2025, 11:28
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)
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat