AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Unterscheidung OnClose durch Nutzer oder Windows ausgelöst
Thema durchsuchen
Ansicht
Themen-Optionen

Unterscheidung OnClose durch Nutzer oder Windows ausgelöst

Ein Thema von RSE · begonnen am 14. Apr 2010 · letzter Beitrag vom 16. Apr 2010
Antwort Antwort
Seite 1 von 2  1 2      
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#1

Unterscheidung OnClose durch Nutzer oder Windows ausgelöst

  Alt 14. Apr 2010, 07:52
Hallo!

Wie kann ich unterscheiden, ob der Nutzer mein MainForm geschlossen hat (x oben rechts) oder ob Windows das Programm beendet haben möchte (z.B. wegen Herunterfahren)? Application.Terminated ist in keinem Fall gesetzt und der Sender ist auch immer TMainForm.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö

  Alt 14. Apr 2010, 08:13
Wenn Windows herunterfährt schickt es eine WM_QUERYENDSESSION-Nachricht. Das kannst Du ja als Suchbegriff verwenden
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö

  Alt 14. Apr 2010, 09:19
Schickt Windows nicht auch ein WM_QUIT an die Anwendung?
(sowas könnten auch andere Programme versenden)

Also wenn die Anwendung (Application) beendet wird (WM_QUIT) oder wenn WM_ENDSESSION reinkommt, dann setzt man eine Variable und beendet das Programm.
Wenn ein WM_CLOSE (OnClose, bzw. WM_CLOSEQUERY) beim Fenster ankommt, dann prüft man diese Variable.
Ist sie gesetzt, dann war es nicht der "User", welcher direkt das Programmfenster schließen wollte.


Die Frage WM_QUERYENDSESSION alleine fragt nur, ob Windows runtergefahrten werden darf und WM_ENDSESSION besagt, jetzt wird es runtergefahren.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö

  Alt 14. Apr 2010, 09:33
Aber das WM-QUIT bekommst du auch, wenn du als Benutzer das Programmfenster schließt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö

  Alt 14. Apr 2010, 10:12
Zitat von Luckie:
Aber das WM-QUIT bekommst du auch, wenn du als Benutzer das Programmfenster schließt.
Es kommt aber erst nach OnClose/OnClodeQuery.
Wenn man nun in OnCloseQuery den Vorgang abbricht, dann wird das Fenster und somit die Anwendung nicht geschlossen und es kommt demnach auch kein WM_QUIT.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö

  Alt 14. Apr 2010, 10:17
Ich denke, er bezog sich auf den Satz
Zitat von himitsu:
Also wenn die Anwendung (Application) beendet wird (WM_QUIT) oder wenn WM_ENDSESSION reinkommt, dann setzt man eine Variable und beendet das Programm.
WM_QUIT hat ja mit WM_ENDSESSION nichts zu tun, da diese Message ja nicht nur verschickt wird, wenn Windows heruntergefahren wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö

  Alt 14. Apr 2010, 10:18
Windows sendet dir auch erst ein WM_CLOSE.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö

  Alt 14. Apr 2010, 10:27
Zitat von Luckie:
Windows sendet dir auch erst ein WM_CLOSE.
Das ist ja gemein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#9

Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö

  Alt 14. Apr 2010, 14:14
Vielleicht hilft noch mehr Hintergrundinfo:

Ich will mir einen Logger basteln, der mitloggt, wann Win gestartet wird und wann es beendet wird. Der Logger kommt in die Autostart, somit kann er den Startzeitpunkt selbständig loggen. Nun will ich es bei OnClose zur Tasktray minimieren und aus der Taskleiste verschwinden lassen. So weit so gut, ist kein Problem mit TJvTrayIcon. Wenn ich nun aber im Taskmanager die Application in der Registerkarte Anwendungen (also nicht Prozess abschießen!) beenden will (was ja sicher der Beendigungsanfrage beim Herunterfahren gleicht), dann minimiert sich der Logger nur. Die Herunterfahren-Zeit nehme und speichere ich in Mainform.OnDestroy.

Wenn ich also eure Diskussion richtig verfolgt habe, muss ich sowieso mit Windows-Messages arbeiten. Dann kann ich ja auch auf WM_ENDSESSION mit Application.Terminate reagieren und eine Variable setzen, damit ich in OnClose Bescheid weiß. Das werde ich morgen früh mal ausprobieren.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö

  Alt 14. Apr 2010, 15:30
Hallo,

Zitat:
Der Logger kommt in die Autostart
Damit loggt er aber nicht den Windows-Start, sondern den Zeitpunkt der Anmeldung.

Ich würde das in "geplante Tasks" machen.
Dort gibt es auch ein "Ausführen beim Windows-Start", "Ausführen beim Windows-Beenden".


Heiko
Heiko
  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 20:51 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