Einzelnen Beitrag anzeigen

BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#1

WMQueryEndSession und Aktion danach

  Alt 24. Mär 2007, 21:46
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
Benjamin
  Mit Zitat antworten Zitat