Home » Tipps & Tricks » System » Systemeigenschaften » Auf das Beenden von Windows reagieren

Auf das Beenden von Windows reagieren

Wird Windows heruntergefahren, so werden zwei Nachrichten an alle Anwendungen geschickt.
Als erstes wird die Nachricht WM_QueryEndSession verschickt.Über das Feld ‚Result‘ des übergebenen Records kann das Programm das Herunterfahren bestätigen oder abbrechen.

Zum Abbrechen muss 0 zurückgegeben werden, ansonsten ein Wert ungleich 0.Anschließend wird die Botschaft WM_EndSession verschickt. Über den Parameter WParam kann abgefragt werden, ob das System nun heruntergefahren wird oder nicht.Abhängig von den Shutdown-Parametern ist es ggf. nicht möglich das Herunterfahren abzubrechen.
Theoretisch kann in beiden Nachrichten auf das Beenden reagiert werden, nur bei der zweiten ist aber gesichert, dass das System auch wirklich heruntergefahren wird.

In beiden Fällen sollte der ausgeführte Code möglichst kurz sein, da Windows das Programm sonst ggf. hart beendet.

private
  procedure WMQueryEndSession (var M: TWMQueryEndSession); message
    WM_QUERYENDSESSION;

procedure TForm1.WMQueryEndSession (var M: TWMQueryEndSession);
begin
inherited;
{ Hier befindet sich der Quellcode, der ausgeführt werden soll
  wenn Windows beendet werden soll }
end;

WM_EndSession wird entsprechend implementiert.Nähere Informationen sind unter den beiden Messages im PSDK zu finden.