Windows-Ende - nicht erkannt im OnClose

Für Fragen von Einsteigern und Programmieranfängern...

Windows-Ende - nicht erkannt im OnClose

Beitragvon malabarista » 17. Sep 2018, 09:28 Windows-Ende - nicht erkannt im OnClose

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 ?
malabarista
 
Beiträge: 294
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Niesi » 17. Sep 2018, 10:47 Re: Windows-Ende - nicht erkannt im OnClose

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

Gruß
Harald
Niesi
 
Beiträge: 64
Registriert: 26. Jun 2016, 18:44

Beitragvon Timm Thaler » 17. Sep 2018, 11:13 Re: Windows-Ende - nicht erkannt im OnClose

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.
Timm Thaler
 
Beiträge: 730
Registriert: 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
Nach oben

Beitragvon sstvmaster » 17. Sep 2018, 13:48 Re: Windows-Ende - nicht erkannt im OnClose

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
OS: Windows 7 32/64bit
Lazarus 1.8.4, 32bit
Lazarus 2.1.0 Trunk 3.3.1, 32bit
sstvmaster
 
Beiträge: 93
Registriert: 22. Okt 2016, 22:12
OS, Lazarus, FPC: Lazarus 1.8.4 + 2.1.0 Trunk 3.3.1 / Win32, Windows 7 32+64bit | 
CPU-Target: 32Bit
Nach oben

Beitragvon Warf » 17. Sep 2018, 14:43 Re: Windows-Ende - nicht erkannt im OnClose

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
Warf
 
Beiträge: 985
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Niesi » 17. Sep 2018, 17:06 Re: Windows-Ende - nicht erkannt im OnClose

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 ...
Niesi
 
Beiträge: 64
Registriert: 26. Jun 2016, 18:44

Beitragvon Warf » 17. Sep 2018, 17:15 Re: Windows-Ende - nicht erkannt im OnClose

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
Warf
 
Beiträge: 985
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon malabarista » 18. Sep 2018, 10:12 Re: Windows-Ende - nicht erkannt im OnClose

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.
malabarista
 
Beiträge: 294
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon MacWomble » 18. Sep 2018, 20:06 Re: Windows-Ende - nicht erkannt im OnClose

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.
MacWomble
 
Beiträge: 610
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19 Cinnamon / CodeTyphon Generation V Plan 6.60 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon malabarista » 19. Sep 2018, 09:01 Re: Windows-Ende - nicht erkannt im OnClose

der erste Link.
Es kommt zuerst ein endquerysession und dann ein endsession.
Und so kann ich beim endquerysession meine Speicherung machen.
malabarista
 
Beiträge: 294
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 19. Sep 2018, 09:07 Re: Windows-Ende - nicht erkannt im OnClose

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?
Timm Thaler
 
Beiträge: 730
Registriert: 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
Nach oben

Beitragvon malabarista » 19. Sep 2018, 09:14 Re: Windows-Ende - nicht erkannt im OnClose

Weiss ich nicht.
Dieses Projekt ist nur für Windows, und deswegen arbeite ich sehr windowsbezogen, - nicht plattformübergeifend.
malabarista
 
Beiträge: 294
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

porpoises-institution
accuracy-worried