Windows-Ende - nicht erkannt im OnClose

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Windows-Ende - nicht erkannt im OnClose

Beitrag von malabarista »

In meinem Programm sollen, wenn es beendet wird, alle im Hauptspeicher gesammelten Daten in eine Datei gespeichert werden.
Dazu nutze ich das Ereignis OnClose.
Das funktioniert auch bei einem normalen Ende (=Schliessen) des Programms.

ABER: es funktioniert nicht, wenn Windows beendet wird.
Anscheinend benötige ich da noch ein anderes Ereignis. Welches ?

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 331
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von Niesi »

Sieh Dir mal bitte "Application.OnEndSession" an, das könnte helfen.

Gruß
Harald
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von Timm Thaler »

Darauf würde ich mich aber nicht verlassen. Windows gibt einem Programm beim Herunterfahren oder Neustart nur kurz Zeit, und wenn es nicht reagiert, wird es abgeschossen. Dabei können Deine Daten unleserlich werden.

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von sstvmaster »

Mit WM_QUERYENDSESSION, WM_ENDSESSION und ShutdownBlockReasonCreate sollte es möglich sein, soweit ich verstanden habe.

https://docs.microsoft.com/en-us/window ... endsession
https://docs.microsoft.com/en-us/window ... endsession
https://docs.microsoft.com/en-us/window ... asoncreate

ich weis aber nicht wie.

Hier gibts auch was dazu: https://forum.lazarus.freepascal.org/in ... #msg285272
und hier: https://www.lazarusforum.de/viewtopic.p ... ION#p73150
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von Warf »

Drauf verlassen das du eine Meldung bekommst würde ich mich sowieso nicht (Windows kann dein Programm einfach so killen wenn der User ungeduldig ist)

Verwende doch lieber einen Timer und schreib alle Minute de Dateien, so kannst du immer Sicherheit das zumindest halbwegs aktuelle Daten gespeichert werden

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 331
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von Niesi »

Warf hat geschrieben:Drauf verlassen das du eine Meldung bekommst würde ich mich sowieso nicht (Windows kann dein Programm einfach so killen wenn der User ungeduldig ist)

Verwende doch lieber einen Timer und schreib alle Minute de Dateien, so kannst du immer Sicherheit das zumindest halbwegs aktuelle Daten gespeichert werden



Das ist prinzipiell korrekt - aber User können auch den Stecker ziehen, den Akku raushebeln usw..
GANZ sicher wird's nie - daher sollten die vorgesehenen Funktionen schon benutzt werden.

Per Timer alle soundsoviel Sekunden / Minuten Sicherungen anlegen kann bei größeren Datenmengen sehr lästig sein ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von Warf »

Niesi hat geschrieben:Das ist prinzipiell korrekt - aber User können auch den Stecker ziehen, den Akku raushebeln usw..
GANZ sicher wird's nie - daher sollten die vorgesehenen Funktionen schon benutzt werden.

Per Timer alle soundsoviel Sekunden / Minuten Sicherungen anlegen kann bei größeren Datenmengen sehr lästig sein ...


Klar, kommt aber auch immer auf die Maschine an. Mit einer SSD sollte man (wenn man in einem separaten Thread schreibt) praktisch nix bemerken, auf einer HDD (oder noch schlimmer auf einem Raspberry Pi mit SD karte) kann das aber das ganze system aufhängen

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von malabarista »

Meine Frage zielte wirklich nur darauf ab: wie bekomme ich die normale Windows-Meldung beim normalen Shutdown mit. Denn die führt zu keinem OnClose-Ereignis.
Die Antwort von sstvmaster hat mir nun weitergeholfen.
Dankeschön.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von MacWomble »

malabarista hat geschrieben:Die Antwort von sstvmaster hat mir nun weitergeholfen.

.. und was davon?
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von malabarista »

der erste Link.
Es kommt zuerst ein endquerysession und dann ein endsession.
Und so kann ich beim endquerysession meine Speicherung machen.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von Timm Thaler »

Ich kann das grad nicht testen: Funktioniert das EndQuerySession auch unter Linux? Also bekomme ich so eine Meldung bei einem Shutdown oder Reboot? Und auch bei einem Konsolenprogramm?

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Windows-Ende - nicht erkannt im OnClose

Beitrag von malabarista »

Weiss ich nicht.
Dieses Projekt ist nur für Windows, und deswegen arbeite ich sehr windowsbezogen, - nicht plattformübergeifend.

Antworten