![]() |
Unterscheidung OnClose durch Nutzer oder Windows ausgelöst
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. |
Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö
Wenn Windows herunterfährt schickt es eine WM_QUERYENDSESSION-Nachricht. Das kannst Du ja als Suchbegriff verwenden ;)
|
Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö
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. |
Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö
Aber das WM-QUIT bekommst du auch, wenn du als Benutzer das Programmfenster schließt.
|
Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö
Zitat:
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. :angel2: |
Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö
Ich denke, er bezog sich auf den Satz
Zitat:
|
Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö
Windows sendet dir auch erst ein WM_CLOSE.
|
Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö
Zitat:
|
Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö
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. |
Re: Unterscheidung OnClose durch Nutzer oder Windows ausgelö
Hallo,
Zitat:
Ich würde das in "geplante Tasks" machen. Dort gibt es auch ein "Ausführen beim Windows-Start", "Ausführen beim Windows-Beenden". Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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 by Thomas Breitkreuz