![]() |
Screensaver verhindern, wenn Fenster nicht den Fokus hat
Hallo,
ich habe ein kleines Programm erschienen, dessen MainForm ständig auf dem Bildschirm zu sehen ist, das jedoch nicht den Fokus hat. Wie kann ich verhindern, dass der Screensaver anspringt bzw. der Monitor in den Powersave-Modus geht? Die im Forum vorgeschlagenen Methoden (u.a. Systemnachrichten abfangen und in eigener Appmessage verarbeiten) funktionieren ja leider nur dann, wenn mein Form den Fokus hat. Das zwischenzeitliche komplette Abschalten kommt auch nicht in Frage, da ja dann immernoch die "Powersave-Uhr" ticken würde... Muss man in meinem Fall dann einen Hook für Systemnachrichten einsetzen? Oder gibt es eine einfachere Möglichkeit? Danke für Eure Hilfe! Ciao Mutier |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Soweit ich es verstanden habe, funktioniert die Methode aus meinem
![]() |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Solche Nachrichten werden an alle Fenster geschickt und nur wenn alle nichts dagegen haben, dann wird es ausgeführt.
Also nur wenn alle Programme mit 0 Antworten, bzw. das Result unverändert lassen, oder die Nachricht garnicht erst behandeln dann wirdder Screensaver ausgeführt ... oder anders gesagt, sobald auch nur ein einiges Programm, egal ob Aktiv, oder nicht, mit 1 antwortet, bleibt der SS aus. Hat Robert aber auch nochmal gesagt :) Zitat:
|
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Jau, das habe ich ausprobiert. Hat mein Fenster den Fokus, wird der Schoner erfolgreich verhindert. Ist mein Fenster sichtbar, aber ohne Fokus, springt der Schoner an. :(
Nochmal 'ne kurze Beschreibung der Ausgangslage: Nach dem Start meines kleinen Tools wird per createprocess ein zweites Programm gestartet, aus dem via Indy Daten ausgelesen werden, die dann in meinem Fenster grafisch dargestellt werden. Dabei teilen sich beide Fenster den Desktop, wobei mein Tool zwar sichtbar ist, jedoch nicht den Fokus hat. Ciao Mutier |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
...*nach oben schieb*
Hat niemand 'ne Idee? Bin ich der einzigste, bei dem der Code den Schoner nicht zuverlässig unterdrückt? Ciao Mutier |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Das mit Application.onMessage hat wohl nicht geklappt, aber die neue Version mit Form.WMSYSCOMMAND sollte laut Robert Marquardt funktionieren. :gruebel:
|
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Hi,
leider funktionieren alle Code-Vorschläge, die diesbzgl. im Forum/in der Codelib auftauchen, bei mir nicht. Das heißt, sobald mein Fenster nicht mehr den Fokus hat, springt der Schoner nach der entsprechenden Zeit an. :( Ich kann es mir auch nicht erklären. Offensichtlich scheint es ja bei allen anderen zu funtionieren. Ciao Mutier |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
[Für das CodeLib-Beispiel] Probier doch mal, ob die Message überhaupt ankommt, d.h. schreibe statt Msg.Result := 1 zum Beispiel ShowMessage('Nachricht!') oder was anderes. Wenn das nicht der Fall ist, müsste es theoretisch wirklich am Fokus liegen. Das wäre jedoch seltwürdig - oder merksam? ;-)
|
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
... das war 'ne gute Idee. :) Ergebnis: Die Message kommt nur dann an, wenn das Fenster den Fokus hat.
Edit: Ich habe es eben nochmal mit 'nem jungfräulichen Form ausprobiert, um etwaige Abhängigkeiten/Unstimmigkeiten in meinem Programm auszuschließen. Am Ergebnis hat sich nix getan. Es kann also eigentlich nicht sein, dass Windows die Nachricht an alle Fenster schickt. Getestet mit folgendem Code:
Code:
Ciao
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} // Mit folgender Zeile wird die Prozedur im Hauptforumlar deklariert: // Und hier dann das Unterdrücken: procedure TForm1.WMSysCommand(var Msg: TMessage); begin if (Msg.wParam = SC_SCREENSAVE) then begin Msg.Result := 1; showmessage('Da kommt was an...') end else inherited; end; end. Mutier |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
sorry, zu spät für mich :oops:
|
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Habe es getestet, funktioniert tatsächlich nur bei Fokus :gruebel:
|
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
wäre aber eigenartig, wenndas wirklich nur an die aktive Form gesendet würde :gruebel:
liegt das viellleich irgendwie an der Nachrichtenschleife, in die ihr euch hier eingeschleußt habt? |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Ich schieb' das Topic nochmal hoch. Vielleicht schaut ja nochmal ein D.-Crack drauf.
Aufgabenstellung: Abwürgen des Screensavers und des Monitor-Standbys, wenn das eigene Form nicht den Fokus hat.Der Code in Posting #9 wird in verschiedenen DP-Threads und anderswo im Netz als Lösung vorgschlagen, funktioniert jedoch nur dann, wenn das eigene Fenster den Fokus hat. Danke für Eure Hilfe! Ciao Mutier |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Hallo,
vielleicht doch noch ein paar klärende Worte zu meinen indirekt zitierten Beiträgen: Windows startet den konfigurierten Bildschirmschoner bei entsprechender Idle-Time, indem es dem gerade im Vordergrund befindlichen Fenster die Message WM_SYSCOMMAND mit dem Parameter SC_SCREENSAVE schickt. Lässt dieses Fenster die Nachricht von DefWindowProc behandeln, dann wird effektiv dort der Bildschirmschoner aktiviert. Für nicht aktive Fenster bleibt da nur die vorübergehende Deaktivierung über SystemParametersInfo(). Ich halte das für völlig ausreichend. Das Argument "bloß nicht, mein Programm könnte abstürzen und dann ..." finde ich denkwürdig. Ist die Anwendung so labil, dann möchte ich sie vielleicht garnicht auf meinem Rechner haben - und wenn doch, dann werde ich den Bildschirmschoner halt per Hand wieder aktivieren. Grüße vom marabu |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Hi,
ich kann's hier gerade nicht testen. Weißt Du, ob durch die vorübergehende Aktivierung des Screensavers auch die Standby-Funktion des Monitors ausgeschaltet wird? Ciao Mutier |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Ich will bei MS grundsätzlich nichts ausschließen, aber ich würde mich sehr wundern, wenn da ein Zusammenhang bestehen würde.
marabu |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
... lol. :)
Topic: Das hatte ich mir schon gedacht. Vielen Dank! Ciao Mutier |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
... in den
![]() Ciao Mutier |
Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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