AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Windows wurde doch nicht heruntergefahren und ich merke davon nichts

Windows wurde doch nicht heruntergefahren und ich merke davon nichts

Ein Thema von Der schöne Günther · begonnen am 4. Dez 2015 · letzter Beitrag vom 4. Dez 2015
Antwort Antwort
Der schöne Günther

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

Windows wurde doch nicht heruntergefahren und ich merke davon nichts

  Alt 4. Dez 2015, 12: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
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts

  Alt 4. Dez 2015, 12:41
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts

  Alt 4. Dez 2015, 12:53
Ich reagiere explizit nur auf WM_QUERYENDSESSION ("Hey Leute, wir wollen abmelden") und WM_ENDSESSION ("Wir werden jetzt garantiert abmelden: j/n"). Andere Messages fallen mir nicht ein.

Eigentlich interessiert mich WM_ENDSESSION auch nicht einmal mehr, aber mir ist das aufgefallen und ich kann es nicht nachvollziehen warum das so ist.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts

  Alt 4. Dez 2015, 12:59
Um welches WINDOWS geht es?
Seit WINDOWS VISTA ist alles anders:
https://msdn.microsoft.com/en-us/lib...or=-2147217396
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts

  Alt 4. Dez 2015, 13:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts

  Alt 4. Dez 2015, 13:44
Wenn deine Anwendung bei WM_QUERYENDSESSION ein True zurückliefert, dann ist dieses Verhalten durchaus korrekt, denn
Zitat:
When an application returns TRUE for this message, it receives the WM_ENDSESSION message, regardless of how the other applications respond to the WM_QUERYENDSESSION message.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#7

AW: Windows wurde doch nicht heruntergefahren und ich merke davon nichts

  Alt 4. Dez 2015, 16:45
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf