AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Screensaver verhindern, wenn Fenster nicht den Fokus hat
Thema durchsuchen
Ansicht
Themen-Optionen

Screensaver verhindern, wenn Fenster nicht den Fokus hat

Ein Thema von Mutier · begonnen am 1. Aug 2006 · letzter Beitrag vom 26. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Mutier

Registriert seit: 22. Jul 2006
20 Beiträge
 
#1

Screensaver verhindern, wenn Fenster nicht den Fokus hat

  Alt 1. Aug 2006, 12:13
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
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#2

Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat

  Alt 1. Aug 2006, 16:20
Soweit ich es verstanden habe, funktioniert die Methode aus meinem CodeLib-Vorschlag auch ohne Fokus - schon probiert?
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat

  Alt 1. Aug 2006, 16:50
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 von Robert Marquardt:
Windows sendet jedesmal wenn der Screensaver anspringen soll eine WMSYSCOMMAND mit Parameter SC_SCREENSAVE an alle Applikationen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Mutier

Registriert seit: 22. Jul 2006
20 Beiträge
 
#4

Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat

  Alt 1. Aug 2006, 17:38
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
  Mit Zitat antworten Zitat
Mutier

Registriert seit: 22. Jul 2006
20 Beiträge
 
#5

Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat

  Alt 4. Aug 2006, 12:13
...*nach oben schieb*

Hat niemand 'ne Idee? Bin ich der einzigste, bei dem der Code den Schoner nicht zuverlässig unterdrückt?

Ciao Mutier
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#6

Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat

  Alt 4. Aug 2006, 21:49
Das mit Application.onMessage hat wohl nicht geklappt, aber die neue Version mit Form.WMSYSCOMMAND sollte laut Robert Marquardt funktionieren.
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Mutier

Registriert seit: 22. Jul 2006
20 Beiträge
 
#7

Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat

  Alt 4. Aug 2006, 22:04
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
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#8

Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat

  Alt 4. Aug 2006, 22:19
[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?
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Mutier

Registriert seit: 22. Jul 2006
20 Beiträge
 
#9

Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat

  Alt 4. Aug 2006, 22:41
... 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:
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.
Ciao
Mutier
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Screensaver verhindern, wenn Fenster nicht den Fokus hat

  Alt 4. Aug 2006, 22:52
sorry, zu spät für mich
  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 03:36 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