![]() |
Bildschirmsperre verhindern?
Hallo in die Runde
ich möchte gern während mein Programm läuft verhindern, dass sich der Bildschirmschoner aktiviert. Ziel ist es, ein 'Anzeigetool zu programmieren, welches auf Rechnern läuft, welche via Vorgabe von IT-Secure nach 15 Minuten Inaktivität gespertt werden (Bildschirmschonersperre mit Passworteingabe). Ich habe nach langer Suche immer wieder die gleiche Lösung gefunden, aber die funktioniert leider nicht
Delphi-Quellcode:
Die Message kommt zwar an und es wird auch in die Routine gesprungen, allerdings sperrt sich der Bildschirm trotzdem.
procedure THF.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin if (msg.message = WM_SYSCOMMAND) and (msg.wparam = SC_SCREENSAVE) then begin Msg.wParam := 0; Msg.message := sc_Move; Handled := true; end; end; Betriebssystem ist Windows 7 |
AW: Bildschirmsperre verhindern?
MSDN :
Zitat:
|
AW: Bildschirmsperre verhindern?
Delphi-Quellcode:
Oder so:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); begin if (msg.wparam = SC_SCREENSAVE) then begin Msg.wParam := 0; SendMessage (0, WM_SYSCOMMAND, SC_SCREENSAVE, -1) ; Panel1.Color:= clRed; //nur Anzeige, dass Routine durchlaufen wird Handled := true; end; end;
Delphi-Quellcode:
private
{ Private-Deklarationen } procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMSysCommand(var Msg: TMessage); begin Panel1.Color:= clRed; //nur Anzeige, dass Routine durchlaufen wird if Msg.wParam = SC_SCREENSAVE then Msg.Result := 1 else inherited; end; |
AW: Bildschirmsperre verhindern?
Bildschirmsperre ≠ Bildschirmschoner.
Was du verhindern könntest wäre der evtl. eintretende Standby/Ruhezustand nach x Minuten Leerlauf aber nicht die Systemvorgabe die Session nach einer bestimmten Leerlaufzeit zu sperren. |
AW: Bildschirmsperre verhindern?
Zitat:
![]()
Delphi-Quellcode:
(Code aus
procedure JiggleMouse;
var Inpt: TInput; begin Inpt.Itype := INPUT_MOUSE; Inpt.mi.dx := 0; Inpt.mi.dy := 0; Inpt.mi.mouseData := 0; Inpt.mi.dwFlags := MOUSEEVENTF_MOVE; Inpt.mi.Time := 0; Inpt.mi.dwExtraInfo := 0; SendInput(1, Inpt, SizeOf(Inpt)); end; ![]() |
AW: Bildschirmsperre verhindern?
Alter Schwede, das ist aber wirklich ... fies 8-) :twisted:
|
AW: Bildschirmsperre verhindern?
Hmm..
Die Geschichten mit WMSysCommand( oder (msg.wparam = SC_SCREENSAVE) funktionieren nicht mehr wirklich. Gerade wenn in ner Domaine per GruppenRichtline die Bildschirmsperre aktiviert wird. Ab Windows 7 geht dass nur noch mit PowerCreateRequest PowerSetRequest PowerClearRequest richtig. Bei Windows XP/2003 gab es SetThreadExecutionState Mit beiden Wegen wird dem Betriebssystem mitgeteilt, das hier ein Process/Thread läuft, der nicht unterbrochen werden darf. Als Parameter kann da neben dem Ruhezustand auch Display-Sperre u.ä. angegeben und verhindert werden. Hatte da mal eine Unit erstellt, welche die für einen kleinen Videoplayer benutzt hat. (Nichts ist schlimmer als beim Video schauen immer wieder die Maus zu bewegen. Alternativ geht das über SentInput, indem du so eine Tastatur-Betätigung simulierst. Dieses muss dann per Timer immer wieder erfolgen. |
AW: Bildschirmsperre verhindern?
Zitat:
Was Interessiert es Windows, ob dein Programm diese Message anders verarbeitet? Wenn, dann kann und wird Windows maximal auf das Result achten. |
AW: Bildschirmsperre verhindern?
|
AW: Bildschirmsperre verhindern?
Hmm...
Zitat:
Wieso ein externes Tool verwenden, wenn es über die API auch direkt richtig geht und dafür seitens Microsoft auch so vorgesehen ist? ;) Such mal hier im Forum nach PowerCreateRequest PowerSetRequest PowerClearRequest SetThreadExecutionState Es sind bereits in Vergangenheit genau diese Punkte bereits besprochen worden... |
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