![]() |
Herunterfahren im minimierten Zustand erkennen
Hi zusammen,
ich sitze jetzt schon seit einigen Stunden an einem eigentlich simplen Problem: Wie erkenne ich das Herunterfahren des Windows Systems(Win 7) wenn mein Programm minimiert ist. ich habe bereits einen Ansatz gefunden jedoch funktioniert dieser nur mit offenem Fenster zuverlässig, im minimierten Zustand funktioniert es manchmal und manchmal nicht ohne ersichtlichen Grund, fällt euch eine sichere Methode ein?
Code:
Ich muss zugeben ich verstehe den code selber nur teilweise und habe in kopiert (bis jetzt habe ich mich nie gross um Messages gekümmert) ich denke allerdings es der Fehler liegt tiefer irgendwo bei Windows.
private
procedure WMQueryEndSession(var M: TWMQueryEndSession); message WM_QUERYENDSESSION; procedure TForm1.WMQueryEndSession(var M: TWMQueryEndSession); begin inherited; Sicherung; // wird bei herunterfahren ausgeführt windows.Beep(800,400); M.Result := 1; Close; end; |
AW: Herunterfahren im minimierten Zustand erkennen
Woran erkennst du Fälle, bei denen es nicht klappt? Win7 gibt Programmen nicht mehr unendlich Zeit in diesem Message-Handler, so dass dein Prozess u.U. unverrichteterdinge abgeschossen wird, wenn die Operation darin zu lange dauert.
|
AW: Herunterfahren im minimierten Zustand erkennen
![]() Deine Sicherung solltest du beim Eintreffen von ![]() |
AW: Herunterfahren im minimierten Zustand erkennen
Viel sinnvoller ist es dem System auch zu sagen, dass man noch etwas zu tun hat und was. Das wird dann dem Benutzer auch angezeigt. Denn ansonsten drückt der ohnehin auf Shutdown erzwingen. Mehr dazu findest du hier:
Shutdown allgemein: ![]() ShutdownBlockReasonCreate: ![]() |
AW: Herunterfahren im minimierten Zustand erkennen
Zitat:
|
AW: Herunterfahren im minimierten Zustand erkennen
Zitat:
Einfach die Sicherung bei der Message ![]() |
AW: Herunterfahren im minimierten Zustand erkennen
So hoffe ich empfange die Message mit diesem code richtig:
Code:
Der Code funktioniert nun wie vorher im offenen zustand und im minimierten zustand falls das programm im autostart gestartet wurde und nachträglich minimiert. Wenn es minimiert gestartet wird funktioniert er nie und wenn es von hand geöffnet wird und dann minimiert funktioniert er selten. Ich bin ratlos :roteyes:
private
procedure WMENDSESSION(var M: TWMENDSESSION); message WM_ENDSESSION; procedure TForm1.WMENDSESSION(var M: TWMENDSESSION); begin inherited; //Sicherung; // sollte zeitlich eigentlich nicht ins gewicht fallen aber sicher ist sicher windows.Beep(800,400); M.Result := 1; // Bestätigt das Herunterfahren (WICHTIG!) Close; end; Da die Sicherung(nur ein kleiner Dateizugriff) sowieso nicht lange dauert denke ich brauche ich auch keine Begründung für den Nutzer zudem erscheint mein Programm da garnicht und wird schon vorher beendet. |
AW: Herunterfahren im minimierten Zustand erkennen
Okay das Problem wurde anderweitig gelöst(Speicherung bei jeder Veränderung der Daten und critical selections für jeden thread) zwar nicht schön aber dafür zuverlässig, falls doch noch jemand eine elegantere Lösung zur Speicherung von Daten beim herunterfahren weiss würde ich mich natürlich freuen.
|
AW: Herunterfahren im minimierten Zustand erkennen
Ich finde deine jetzige Lösung klingt erheblich schöner! (Man denke z.B. mal an so Nettigkeiten wie Stromausfälle oder BSODs. Da sendet Windows nix mehr ;)) Der Trend geht zudem auch immer mehr in die Richtung, dass ein Programm es nicht mehr so wirklich genau in der Hand hat, ob und wann und wie lange es läuft, bzw. gar welche Teile von ihm laufen. Man schaue sich mal die Mobile-Welt an. Ich gebe gerne zu, dass die für den Desktop nicht Modell stehen sollte, aber selbst solche Ausfälle wie o.g. sind schon Grund genug zum "direkt" sichern. (Zwar werkeln dann auch noch diverse Caches mit, die die eigentliche Ausführung verzögern, dennoch ist man aber zumindest auf einer etwas sichereren Seite.)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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-2025 by Thomas Breitkreuz