![]() |
WMQueryEndSession und Aktion danach
Hallo,
mein Programm soll vor dem Herunterfahren einige Sachen ausführen, die länger sind, als der Rahmen den Windows zulässt. Also fange ich das Herunterfahren ab:
Delphi-Quellcode:
Wenn ich jetzt an der gekennzeichneten Stelle das zu erledigende Einfüge, dann wird das ausgeführt, aber Windows meckert, weil die Antwort, dass nicht heruntergefahren werden soll nicht kommt, laut Windows reagiert mein Programm nicht, was ja auch stimmt.
procedure Shutdown (var Msg : TWMQueryEndSession); message WM_QueryEndSession;
procedure TMainForm.Shutdown (var Msg : TWMQueryEndSession); begin inherited; if esgibtwaszutun Then Begin Msg.Result := 0; //Herunterfahren abbrechen //Hier End Else Msg.Result := 1; end; Jetzt habe ich versucht einfach einen Timer zu starten, der die ganzen Sachen dann danach erledigen soll. Komischerweise wird der nie aufgerufen. Jetzt meine Frage: Wie kann ich möglichst Ideal das Herunterfahren unterbrechen, so dass Windows diese Nachricht bekommt und dann meine Befehle ausführen? [Edit]Vista sagt einem sogar, welches Programm das herunterfahren abbricht. Kann man das unterbinden? [Edit=2]Vista hat da eine neue API, die werde ich dort wohl verwenden. Aber unter XP würde ich die Nachricht doch gerne erst beantworten. Vielen Dank, Benjamin |
Re: WMQueryEndSession und Aktion danach
Zeige einfach eine Nachricht für den Benutzer an, dass dein Programm abschließende Aktionen am durchführen ist. Dann erstellst du einen neuen Thread, in dem du diese Atkionen abarbeitest.
Anschließend teilst du dem Benutzer mit, dass er Windows jetzt runterfahren kann. |
Re: WMQueryEndSession und Aktion danach
Ich habs jetzt so gelöst, dass die Aktionen beim Empfang von WM_EndSession durchgeführt werden. Laut MSDN bekommt mein Programm diese Nachricht nämlich auch, wenn es das Herunterfahren abgebrochen hat.
Funktioniert auch. Nervig ist nur, dass Vista vom Benutzer das Einverständnis für das weiterlaufen des Programms will. Ich werde mir da mal diese neue API ansehen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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