![]() |
Suche API um Bildschirm einzuschalten
Hi. Ihr kennt doch bestimmt die Einstellungen in Windows bei den Energieoptionen. U.a. ist da ja, das der Bildschirm nach der vorgegebenen Zeit ausgeschaltet wird.
Wie kann ich dies in Delphi abfragen, oder auch den Bildschirm wieder ein- oder ausschalten? Danke für Eure Hilfe. |
Re: Suche API um Bildschirm einzuschalten
Mit
Delphi-Quellcode:
kannst du den Monitor ausschalten, mit
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0);
Delphi-Quellcode:
kannst du ihn wieder einschalten
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);
Das hättest du aber auch alles mit der Suchfunktion herausgefunden. |
Re: Suche API um Bildschirm einzuschalten
Super, danke!!! Habe echt vorher gesucht, aber das hab ich net gefunden
|
Re: Suche API um Bildschirm einzuschalten
Irgendwie klappt das trotzdem nicht.
Ich starte das Programm. Nach einer Minute schaltet Windows den Bildschirm aus. Dann läut im Programm der Timer, der den Bildschirm dann einschalten sollte. Ich sehen den aber nur für einen bruchteil der Sekunde, danach ist wieder alles schwarz. Ihr könnt ja mal meinen Quellcode ausprobieren.
Delphi-Quellcode:
var
Form1: TForm1; Zeit : Integer; implementation {$R *.dfm} procedure TForm1.BildschirmAusschalten; begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2); end; procedure TForm1.BildschirmEinschalten; begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1); end; procedure TForm1.FormActivate(Sender: TObject); begin Zeit := 10; BildschirmEinschalten; end; procedure TForm1.btnOnClick(Sender: TObject); begin BildschirmEinschalten; end; procedure TForm1.btnOffClick(Sender: TObject); begin BildschirmAusschalten; end; procedure TForm1.Timer1Timer(Sender: TObject); begin BildschirmEinschalten end; end. |
Re: Suche API um Bildschirm einzuschalten
Du könntest alternativ in den Energieoptionen einfach einstellen, dass Windows den Bildschirm gar nicht erst ausschaltet.
|
Re: Suche API um Bildschirm einzuschalten
Hallo,
bei mir funktioniert dein Code so wie er soll. Der Monitor wird abgeschaltet und nach Ablauf des Timers schaltet er sich wieder an und bleibt es dann auch. |
Re: Suche API um Bildschirm einzuschalten
vllt musst du noch die grafikkarte "einschalten", für die gibts ja auch nen energiesparmodus....
|
Re: Suche API um Bildschirm einzuschalten
Hi,
ich hab grad mal in der MSDN nachgesehen und fand das: Zitat:
|
Re: Suche API um Bildschirm einzuschalten
Naja, einschalten kann man den Bildschirm ja mit -1
|
Re: Suche API um Bildschirm einzuschalten
Zitat:
|
Re: Suche API um Bildschirm einzuschalten
Delphi-Quellcode:
procedure TForm1.BildschirmEinschalten;
begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1); end; |
Re: Suche API um Bildschirm einzuschalten
Also nochmal zur aktuellen Problembeschreibung:
Habe ja zwei Buttons wo ich den Bilschirm ein- und ausschalten kann. Das funktioniert ohne Probleme. Jetzt warte ich solange, bis Windows den Bildschirm ausschaltet. Im Hintergrund läuft das Programm noch mit einem Timer der alle 5s den Bildschirm einschalten soll. Nun, er macht schon irgendwie was, aber net so wie ich will. Wenn der Timer abgelaufen ist und den Bilschirm einschalten will macht er das auch kurz, aber mir kommt es so vor, das Windows dann sofort wieder den Bildschirm ausschalten will. Er bleibt dann auch schwarz. Woran kann das liegen? Was macht Windows eigentlich wenn der Bildschirm durch die Energieoption ausgeschaltet wird? |
AW: Suche API um Bildschirm einzuschalten
Als ich ein Konsolenprogramm nicht beenden konnte, fand ich heraus, dass Sendmessage der Verursacher war.
Man sollte sich angewöhnen, Sendmessage durch Postmessage zu ersetzen, wenn man keine Blockade verursachen will. ![]()
Delphi-Quellcode:
program DISPLAYOFF; //oder DISPLAYON
//{$APPTYPE CONSOLE} uses Windows; const WM_SYSCOMMAND = 274; MONITOR_OFF = 2; MONITOR_ON = -1; Begin sleep(2000); // muss sein!!! kann aber evtl auch 500 reichen PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);//MONITOR_ON sleep(2000); // kann entfallen Exit; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz