![]() |
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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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