Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WMQueryEndSession und Aktion danach (https://www.delphipraxis.net/89028-wmqueryendsession-und-aktion-danach.html)

BenjaminH 24. Mär 2007 21:46


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:
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;
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.
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

Zacherl 25. Mär 2007 00:49

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.

BenjaminH 25. Mär 2007 12:39

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 17:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz