![]() |
Windows wurde doch nicht heruntergefahren und ich merke davon nichts
Wenn Windows heruntergefahren/abgemeldet wird und ich es richtig verstanden habe ist die Reihenfolge so:
In der ![]() Zitat:
Meine Testanwendung enthält folgenden Message-Handler:
Delphi-Quellcode:
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.
procedure TForm1.WMEndSession(var Message: TWMEndSession);
begin ShuttingDown := Message.EndSession; //(Logge "ShuttingDown" in eine Textdatei) inherited; end; 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
Delphi-Quellcode:
gewesen. Wie kann das sein? Es hätte doch
True
Delphi-Quellcode:
sein müssen. Wenn wirklich heruntergefahren wird, wird auch
False
Delphi-Quellcode:
protokolliert.
True
Irgendwas kann da nicht stimmen :| |
AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts
Mal so herum gesponnen:
um x:00 fährst Du Windows herunter. Ein paar Anwendungen ignorieren das. um x:30 sagst Du "Na gut dann eben nicht" und kümmerst Dich in Ruhe um die ignoranten Anwendungen. Dann hat sich Deine brave Anwendung schon längst verabschiedet und bekommt nichts mehr mit. Anders formuliert könnte es sein, daß Du nicht alle Messages protokollierst? Gruß K-H |
AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts
Ich reagiere explizit nur auf
Delphi-Quellcode:
("Hey Leute, wir wollen abmelden") und
WM_QUERYENDSESSION
Delphi-Quellcode:
("Wir werden jetzt garantiert abmelden: j/n"). Andere Messages fallen mir nicht ein.
WM_ENDSESSION
Eigentlich interessiert mich
Delphi-Quellcode:
auch nicht einmal mehr, aber mir ist das aufgefallen und ich kann es nicht nachvollziehen warum das so ist.
WM_ENDSESSION
|
AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts
Um welches WINDOWS geht es?
Seit WINDOWS VISTA ist alles anders: ![]() |
AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts
Es geht mir eigentlich um jedes Windows von XP bis 10. Dass sich hier mit Vista viel geändert hat weiß ich. Aber ich lese da nur heraus dass sich seit Vista das Verhalten mit WM_QUERYENDSESSION geändert hat, nicht aber WM_ENDSESSION.
|
AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts
Wenn deine Anwendung bei
Delphi-Quellcode:
ein
WM_QUERYENDSESSION
Delphi-Quellcode:
zurückliefert, dann ist dieses Verhalten durchaus korrekt, denn
True
Zitat:
|
AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts
Folgender Code ist für WIN8.1 völlig uninteressant - oder ist da etwas falsch?
Wie müsste er aussehen, um irgendeine Reaktion auszulösen?
Delphi-Quellcode:
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs; type TForm1 = class(TForm) private { Private-Deklarationen } procedure WMQueryEndSession(var Msg: TWMQueryEndSession); message WM_QUERYENDSESSION; procedure WMEndSession(var Msg: TWMEndSession); message WM_ENDSESSION; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession); begin if MessageDlg('Close Windows ?', mtConfirmation, [mbYes,mbNo], 0) = mrNo then Msg.Result := 0 else Msg.Result := 1 ; end; procedure TForm1.WMEndSession(var Msg: TWMEndSession); begin if Msg.EndSession = True then ShowMessage('Windows is shutting down ' + #10#13 + 'at ' + FormatDateTime('c', Now)); inherited; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz