AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Bildschirmschoner unterdrücken (Win7/8) - mal gehts mal nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Bildschirmschoner unterdrücken (Win7/8) - mal gehts mal nicht

Ein Thema von Andreas2k · begonnen am 6. Mär 2014 · letzter Beitrag vom 7. Mär 2014
Antwort Antwort
Andreas2k

Registriert seit: 2. Jan 2003
108 Beiträge
 
Delphi XE5 Professional
 
#1

Bildschirmschoner unterdrücken (Win7/8) - mal gehts mal nicht

  Alt 6. Mär 2014, 11:04
Folgendes Problem:
Ich habe eine Anwendung geschrieben wo der Nutzer den Screensaver temporär ab- und dann wieder anschalten kann um kritische Prozesse verfolgen zu können.

Zum abschalten rufe ich SystemParametersInfo wie folgt auf
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);

zum wieder einschalten
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, nil, 0);

Soweit so gut. Leider funktioniert es nur manchmal und nicht immer!

Zum Testen habe ich auf meinem Win7 und Win8.1 Laptop den Bildschirmschoner auf 1 Minute gestellt.

Manchmal funktioniert es und der Bidlschirmschoner bleibt wirklich aus. Versuche ich es ein paar Minuten später noch einmal geht es plötzlich nicht mehr und der Bildschirmschoner geht nach einer Minute dennoch an.

Ich habe bisher nicht herausgefunden warum es mal klappt und dann wieder nicht!

Die Funktion SystemParametersInfo gibt immer einen Bool von -1 zurück - laut Hilfe gilt alles außer 0 als erflgreich (true).


Ach ja. Der Bildschirmschoner ist so eingestellt das beim reaktivieren der Nutzer sein Passwort eingeben muss - daher ist die temporäre deaktivierung des Bildschirmschoners auch so wichtig!



Was also mache ich falsch bzw. wie kann ich den Bildschirmschoner 100% sicher unterdrücken?


-
Andreas

Geändert von Andreas2k ( 6. Mär 2014 um 11:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Bildschirmschoner unterdrücken (Win7/8) - mal gehts mal nicht

  Alt 6. Mär 2014, 11:41
Ich weiß, der Ansatz ist vielleicht nicht so professionell, läuft bei mir aber wunderbar: Ich bewege via Programm die Maus um 1 Pixel hin und wieder zurück.
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#3

AW: Bildschirmschoner unterdrücken (Win7/8) - mal gehts mal nicht

  Alt 6. Mär 2014, 13:13
Lastinput muss man resetten - entweder im normalen Programmablauf oder mit einem Timer:

keybd_event(0, 0, 0, 0); //Reset LastInput .
INFO:
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Geändert von hathor ( 6. Mär 2014 um 15:11 Uhr)
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Bildschirmschoner unterdrücken (Win7/8) - mal gehts mal nicht

  Alt 6. Mär 2014, 13:43
Etwas professioneller und - hoffentlich - auch zuverlässiger sollte es so gehen:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  {...}
  private
    procedure AppMessage(var msg: TMsg; var handled: boolean);
  {...}
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMessage;
end;

procedure TForm1.AppMessage(var msg: TMsg; var handled: boolean);
begin
  if (msg.message = WM_SYSCOMMAND) and (msg.wparam = SC_SCREENSAVE) then
    handled := true;
end;
Falls die Inaktivierung des Screensavers nicht während der gesamten Laufzeit des eigenen Programms ausgelöst sein soll, sondern nur sporadisch über bestimmte Abläufe innerhalb des Programms, dann kann diese Feinsteuerung mittels einer zusätzlich eingeführten Variablen gesteuert werden. Die muss dann in der Methode AppMessage() ergänzend abgefragt werden, um den dortigen Parameter 'handled' entsprechend zu belegen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Bildschirmschoner unterdrücken (Win7/8) - mal gehts mal nicht

  Alt 6. Mär 2014, 14:15
Dort ist doch aus Sicherheitsgründen der Bildschirmschoner an?


Lösung: Du schreibst einen Bildschirmschoner, welcher auf dem zu schonenden Bildschirm die gewünschten Statusinfos anzeigt.
(und vielleicht auch noch das Firmenlogo und paar bunte bewegte Linien drumrum)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Bildschirmschoner unterdrücken (Win7/8) - mal gehts mal nicht

  Alt 6. Mär 2014, 14:41
Dort ist doch aus Sicherheitsgründen der Bildschirmschoner an?
Beziehst Du das auf meinen Vorschlag ?

Falls ja, verstehe ich das eingangs beschriebene Problem jedenfalls aber so, dass der Bildschirmschoner während der Laufzeit des eigenen Programms nur temporär bzw. sporadisch nicht wirksam werden soll, vor allem deswegen, weil ansonsten beim Wegklicken des Bildschirmschoners jedes Mal erst ein Passwort eingegeben werden muss.

Mit dem von mir vorgeschlagenen Code wird der Bildschormschoner gar nicht erst optisch wirksam, weil seine zeitabhängige Reaktivierung abgefangen wird. Der Screen, d.h. die Oberfläche des eigenen Programms, ist durchgängig im Blick des Benutzers, solange dies temporär so gewünscht ist. Ein ständiger Switch zwischen absoluter Ab- und Wiedereinschaltung des Bildschirmschoners, was offenbar das Problem verursacht, ist also nicht notwendig.

Ich denke, die Steuerung über die Behandlung der Message des Systems im OnMessage-Event ist genau das, was Andreas2k zur Lösung seines Problems zweckmäßig und optimal einsetzen kann.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Bildschirmschoner unterdrücken (Win7/8) - mal gehts mal nicht

  Alt 6. Mär 2014, 15:48
Wenn der Bildschirmschoner aber schon das Wichtigste anzeigt und die nur mal kurz gucken wollen, ob noch alles läuft, dann braucht man auch nichst mehr machen.


Nja, viele Wege, noch mehr Ziele und nun muß man sich nur noch entscheiden was wirklich gebraucht wird.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:23 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