Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Windows wurde doch nicht heruntergefahren und ich merke davon nichts

  Alt 4. Dez 2015, 13:31
Wenn Windows heruntergefahren/abgemeldet wird und ich es richtig verstanden habe ist die Reihenfolge so:
  1. WM_QUERYENDSESSION wird an die Anwendung gesendet
  2. Das löst das OnCloseQuery-Event des VCL-Formulars aus
  3. WM_ENDSESSION wird an die Anwendung gesendet um den unausweichlichen Shutdown zu verkünden

In der Doku zu WM_ENDSESSION steht dass dort (im WPARAM) angegeben wird ob denn nun abgemeldet wird oder sich der Benutzer umentschieden hat:
Zitat:
If the session is being ended, this parameter is TRUE; the session can end any time after all applications have returned from processing this message. Otherwise, it is FALSE.

Meine Testanwendung enthält folgenden Message-Handler:
Delphi-Quellcode:
procedure TForm1.WMEndSession(var Message: TWMEndSession);
begin
   ShuttingDown := Message.EndSession;
   //(Logge "ShuttingDown" in eine Textdatei)
   inherited;
end;
Ich starte meine Testanwendung, mache Notepad auf und tippe darin ein paar Buchstaben. Somit wird Windows am Herunterfahren gehindert da mich Notepad noch fragen wird ob ich denn nicht lieber speichern möchte.

Ich gehe auf Herunterfahren, bekomme den "Folgende Anwendungen verhindern das Herunterfahren"-Dialog und sage "Abbrechen".

Meine Anwendung hat den Erhalt der WM_ENDSESSION-Nachricht ordnungsgemäß protokolliert und meint, ShuttingDown sei True gewesen. Wie kann das sein? Es hätte doch False sein müssen. Wenn wirklich heruntergefahren wird, wird auch True protokolliert.


Irgendwas kann da nicht stimmen
  Mit Zitat antworten Zitat