AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bildschirmsperre verhindern?

Ein Thema von news2swen · begonnen am 5. Mai 2017 · letzter Beitrag vom 8. Mai 2017
Antwort Antwort
Seite 1 von 2  1 2      
news2swen

Registriert seit: 7. Nov 2008
36 Beiträge
 
Delphi XE4 Enterprise
 
#1

Bildschirmsperre verhindern?

  Alt 5. Mai 2017, 15:59
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:
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;
Die Message kommt zwar an und es wird auch in die Routine gesprungen, allerdings sperrt sich der Bildschirm trotzdem.

Betriebssystem ist Windows 7
Swen
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Bildschirmsperre verhindern?

  Alt 5. Mai 2017, 16:29
MSDN :
Zitat:
If password protection is enabled by policy, the screen saver is started regardless of what an application does with the SC_SCREENSAVE notification
Wenn es eine Vorgabe der / des Admins ist hast Du verloren
Fritz Westermann
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#3

AW: Bildschirmsperre verhindern?

  Alt 5. Mai 2017, 16:34
Delphi-Quellcode:
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;
Oder so:
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;

Geändert von t.roller ( 5. Mai 2017 um 16:55 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Bildschirmsperre verhindern?

  Alt 5. Mai 2017, 16:48
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.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.465 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Bildschirmsperre verhindern?

  Alt 5. Mai 2017, 17:30
ich möchte gern während mein Programm läuft verhindern, dass sich der Bildschirmschoner aktiviert.

Betriebssystem ist Windows 7
Seit Windows 7 funktionieren die alten Methoden nicht mehr. Nur eines tut's noch: Regelmäßiges Simulieren einer Mausbewegung durch
SendInput

Delphi-Quellcode:
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;
(Code aus u_dzOsUtils)
Thomas Mueller
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Bildschirmsperre verhindern?

  Alt 5. Mai 2017, 17:34
Alter Schwede, das ist aber wirklich ... fies
  Mit Zitat antworten Zitat
HolgerX

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

AW: Bildschirmsperre verhindern?

  Alt 5. Mai 2017, 17:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#8

AW: Bildschirmsperre verhindern?

  Alt 5. Mai 2017, 18:37
Delphi-Quellcode:
    if (msg.message = WM_SYSCOMMAND) and (msg.wparam = SC_SCREENSAVE) then
    begin
       Msg.wParam := 0;
        Msg.message := sc_Move;
        Handled := true;
    end;
Das soll jemals funktioniert haben?

Was Interessiert es Windows, ob dein Programm diese Message anders verarbeitet?
Wenn, dann kann und wird Windows maximal auf das Result achten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Bildschirmsperre verhindern?

  Alt 6. Mai 2017, 16:33
Hilft das hier eventuell weiter?

*klick*
Torsten
Ich kam, sah und alles Funktionierte.
Dann klingelte mein Wecker...
  Mit Zitat antworten Zitat
HolgerX

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

AW: Bildschirmsperre verhindern?

  Alt 6. Mai 2017, 19:20
Hmm...


Hilft das hier eventuell weiter?

*klick*

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...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz