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