Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Windows API / MS.NET Framework API (https://www.delphipraxis.net/20-library-windows-api-ms-net-framework-api/)
-   -   Delphi Bildschirmschoner unterdrücken (https://www.delphipraxis.net/74242-bildschirmschoner-unterdruecken.html)

ManuMF 31. Jul 2006 11:06


Bildschirmschoner unterdrücken
 
Um einen Bildschirmschoner (oder auch Screensaver) zu unterdrücken, hat marabu hier bzw. hier die Lösung gepostet.
Eine Verbesserung von Robert Marquardt stammt von hier.


:arrow: Methode 1
Diese Methode schaltet den Bildschirmschoner über SystemParametersInfo ein bzw. aus:

Delphi-Quellcode:
  SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, ***, nil, 0);
  // Statt *** einsetzen:
  // 1 für AN
  // 0 für AUS
Hier ist wichtig, dass später wieder der Ausgangszustand wiederhergestellt wird, z.B. beim Beenden des Programms.


:arrow: Methode 2
Die andere Methode funktioniert über Messages, hierzu muss das Fenster jedoch den Fokus besitzen:

Delphi-Quellcode:
// Mit folgender Zeile wird die Prozedur im Hauptforumlar deklariert:
  procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND;

// Und hier dann das Unterdrücken:
procedure TMainForm.WMSysCommand(var Msg: TMessage);
begin
  if (Msg.wParam = SC_SCREENSAVE) then
    Msg.Result := 1
  else
    inherited;
end;
Eine Beschreibung dieses Verfahrens und der Vorteil gegenüber dem ersten liefert Robert Marquardt hier:

Zitat:

Zitat von Robert Marquardt
Windows sendet jedesmal wenn der Screensaver anspringen soll eine WMSYSCOMMAND mit Parameter SC_SCREENSAVE an alle Applikationen.
Antwortet man mit der 1 in Msg.Result, dann startet Windows den Screensaver nicht.
Um OnDestroy muss man sich nicht kuemmern, da die Applikation ja dann sowieso nicht mehr da ist um zu antworten.

Die Loesung den Screensaver per SystemParametersInfo zu deaktivieren ist ein bischen problematisch, da das Programm ja abstuerzen kann und dann den Screensaver nicht mehr reaktiviert.


:arrow: Methode 3
Wer die JEDIs installiert hat, kann auch ganz einfach den JvScreenSaveSuppressor (aus JvSystem) nutzen ;-).

[edit=fkerber]kleinen Schreibfehler im Code korrigiert. Mfg, fkerber[/edit]
[edit=ManuMF]richtiger Name der Komponente[/edit]
[edit=ManuMF]Code von Methode 2 korrigiert[/edit]
[edit=Matze]Hinweis zu Methode 2 hinzugefügt. Mfg, Matze[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 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