Entwickler-Ecke
Windows API - Bildschirm abschalten
Radioactive - Do 06.01.05 15:38
Titel: Bildschirm abschalten
Hi,
wenn ich unter Windows etwas länger warte, wird (bei entsprechender Einstellung) der Bildschirm zum Stromsparen oder gegen neugierige Blicke :wink: abgeschalten. Wie kann ich das aus einem Delphi-Programm heraus machen (Also ich klicke z.b. auf Button1 und der Bildschirm geht aus) ?
Und da fällt mir gleich eine dazu passende Frage ein: Wie schalte ich den Bildschirmschoner ein (z.B. gab es unter Office97 eine "Short-Cut"-Leiste, die einen Bildschirmschonerbutton hatte) ?
Radioactive
F34r0fTh3D4rk - Do 06.01.05 15:51
Hiermit aus:
Delphi-Quelltext
1:
| SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0); |
Und damit wieder an:
Delphi-Quelltext
1:
| SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1); |
mikeyboy - Do 06.01.05 15:57
da ich selbst an dem Thema interessiert bin hätte ich noch eine kurze frage?
wenn ich auf den Button klicke ist der Bildschirm aus okay! Aber wie soll i den Bildschirm einschalten wenn i nix seh??
F34r0fTh3D4rk - Do 06.01.05 15:58
mach n timer den du dann aktivierst und der nach dem timerintervall den monitor wieder anschaltet
mikeyboy - Do 06.01.05 16:00
OK thx
F34r0fTh3D4rk - Do 06.01.05 16:02
also so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0); timer1.enabled:= true; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1); timer1.enabled:= false; end;
procedure TForm1.FormCreate(Sender: TObject); begin timer1.enabled:= false; timer1.interval:= 5000; end; |
Dann schalltet er nach 5 sek wieder ab
Radioactive - Do 06.01.05 16:02
War schonmal gut, geht aber nur unter Win95. Da das aktuelle Betriebssystem WinXP ist, das ich auch habe, zeigt der Befehl keine Wirkung. :(
F34r0fTh3D4rk - Do 06.01.05 16:05
so gehts auch bei winXP
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1); timer1.enabled:= true; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0); timer1.enabled:= false; end;
procedure TForm1.FormCreate(Sender: TObject); begin timer1.enabled:= false; timer1.interval:= 5000; end; |
Radioactive - Do 06.01.05 17:03
OK, jetzt geht er schon mal aus. Aber er bleibt bei mir nur 2-3 sec aus, dann geht er wieder an. Vielleicht liegt das aber auch daran, dass ich gerade im Internet bin (modem). Ich werde es nochmal offline versuchen.
Wie bekommt man jetzt den Bildschirmschoner an?
Delete - Do 06.01.05 17:20
Delphi-Quelltext
1:
| timer1.interval:= 5000; |
Stell mal das intervall höher, dann dauerts auch länger ...
Radioactive - Do 06.01.05 17:31
Ganz toller Tip. So blöd bin ich nun auch wieder nicht. Ich habe das Intervall auf 10s gestellt, und es bleibt bei den 2-3s. Aber wie gesagt, es liegt warscheinlich nicht am Code, sondern an meinem Computer.
F34r0fTh3D4rk - Do 06.01.05 19:12
entweder daran oder am monitor, ich glaube das ist eine schutzfunktion, weil wenn man sowas komplett in nen timer packt und dann interval auf 1 ms stellt geht der monitor kaputt :?
Radioactive - Sa 08.01.05 14:05
so etwas ähnliches Denke ich auch. Es klappt auch prima, wenn ich es nur einmal mache. Wenn ich es aber öfters hintereinander versuche, bleibt es bei 2-3 sec.
Lassen wir das, der Teil des Threads ist, denke ich, jetzt erledigt. Wenden wir uns dem Biildschirmschoner zu. (Ich werde dafür einen eigenen Thread aufmachen)
F34r0fTh3D4rk - Do 27.01.05 15:58
hab den thread net gefunden, weiß net ob dus schon hast auf jedenfall:
Delphi-Quelltext
1: 2:
| SystemParametersInfo( SPI_SETSCREENSAVEACTIVE, 1, Nil, 0); SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, Nil, 0); |
müsste gehen
Radioactive - Fr 28.01.05 18:51
Danke. Werde es in den anderen Thread reinschreiben.
F34r0fTh3D4rk - So 30.01.05 12:29
wo ist denn der andere thread ?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!