Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Herausfinden ob Neustart, Herunterfahren oder Ruhemodus (https://www.delphipraxis.net/68472-herausfinden-ob-neustart-herunterfahren-oder-ruhemodus.html)

TheMiller 30. Apr 2006 08:37


Herausfinden ob Neustart, Herunterfahren oder Ruhemodus
 
Hallo,

habe schon dort gesucht und mich rund um WM_QueryEndSession und ähnlichem schlau gemacht. Mein Ziel ist es abzufragen, ob der Benutzer Windows neustartet, herunterfährt oder in den Ruhemodus gehen will. Hab schon ein bissl gestöbert, aber hab noch nix passendes gefunden.

Könnt ihr mir Tipps geben? Danke im Voraus


Nach 3 Minuten:

Ah... ich sehe gerade:

Zitat:

Zitat von http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shutdown/base/wm_endsession.asp
0 = The system is shutting down or restarting (it is not possible to determine which event is occurring).

Gibt es gar keine Möglichkeit, den Status abzufangen?

[edit=alcaeus]Beitraege zusammengefuehrt. Den Edit-Button solltest du kennen :roll: Mfg, alcaeus[/edit]

SirThornberry 30. Apr 2006 08:45

Re: Herausfinden ob Neustart, Herunterfahren oder Ruhemodus
 
Warum sollte es eine Möglichkeit geben zwischen herunterfahren und Neustarten zu unterscheiden? In beiden Fällen wird der PC heruntergefahren. Beim Neustart kommt zusätzlich noch das Rebooten hinzu. Aber Runtergefahren wird in beidne Fällen komplett.

TheMiller 30. Apr 2006 09:03

Re: Herausfinden ob Neustart, Herunterfahren oder Ruhemodus
 
Es hat schon einen Grund, warum ich das abfangen möchte. Ich habe ein Programm, das wird ausgeführt, wenn Windows (wie auch immer) beendet wird. (Dies hat auch seinen (vernünftigen) Grund) Wenn das Programm seine Arbeit getan hat, fährt es Windows auch brav herunter. Aber was ist, wenn der User Windows neu booten wollte? Dann muss er immer wieder den PC von Hand einschalten. - Gut, nicht weiter tragisch, stört mich nur...

Hawkeye219 30. Apr 2006 10:17

Re: Herausfinden ob Neustart, Herunterfahren oder Ruhemodus
 
Zitat:

Zitat von DJ-SPM
Wenn das Programm seine Arbeit getan hat, fährt es Windows auch brav herunter.

Verstehe ich das richtig? Dein Programm fährt Windows herunter? Wenn dein Programm die Nachricht "wm_endsession" empfängt, ist der ShutDown-/Restart-Vorgang doch schon eingeleitet worden. Dein Programm sollte eigentlich nur die notwendigen Aktionen (Daten sichern etc.) durchführen und anschließend die Kontrolle an Windows zurückgegeben. Ein möglicher Restart dürfte doch dadurch nicht unterbrochen werden.

Gruß Hawkeye

TheMiller 1. Mai 2006 01:11

Re: Herausfinden ob Neustart, Herunterfahren oder Ruhemodus
 
Mein Programm läuft im Hintergrund ohne Aktion. Wenn es die Nachricht WM_ENDSESSION erhält, führt es seine Arbeit durch. Damit ist der Vorang abgebrochen - oder ist er dann nur "pausiert"? Wenn ja: Wie kann ich den Vorgang weiter druchführen lassen?

Hawkeye219 1. Mai 2006 08:39

Re: Herausfinden ob Neustart, Herunterfahren oder Ruhemodus
 
Hallo DJ-SPM,

ich habe hier noch zwei Links für dich, die einen Fehler in einigen Delphi-Versionen (u.a. Delphi 7) beschreiben.

Link1 Link2

Der erste Link ist schon etwas älter (Delphi 1?), beschreibt aber eine mögliche Lösung des Problems. Du solltest versuchen, die Nachricht WM_ENDSESSION abzufangen und dort deine Applikation mit einer Halt-Anweisung zu beenden. Dadurch wird die Kontrolle an Windows zurückgegeben und somit der Shutdown-Vorgang nicht unterbrochen. Ob dazu ein Hook nötig ist, kann ich dir nicht sagen. Ich würde es zunächst in der Behandlungsroutine für WM_ENDSESSION versuchen.

Hoffentlich hilft es... :roll:

Gruß Hawkeye

SirThornberry 1. Mai 2006 19:06

Re: Herausfinden ob Neustart, Herunterfahren oder Ruhemodus
 
@DJ-SPM: Hast du schon im MSDN nach WM_ENDSESSION geschaut. Über das Result der Message sollte eigentlich geregelt werden ob der Vorgang abgebrochen wird oder nicht.

TStringlist 1. Mai 2006 19:07

Re: Herausfinden ob Neustart, Herunterfahren oder Ruhemodus
 
Zitat:

Zitat von DJ-SPM
Wenn es die Nachricht WM_ENDSESSION erhält, führt es seine Arbeit durch. Damit ist der Vorang abgebrochen - oder ist er dann nur "pausiert"? Wenn ja: Wie kann ich den Vorgang weiter druchführen lassen?

Damit ist der Vorgang nur pausiert. Fortgesetzt wird er einfach durch das 'inherited' am Ende der Botschaftsbehandlungsroutine:


Delphi-Quellcode:
  TForm1 = class(TForm)
    ...
  private
    ...
    procedure EndSessionHandler(var AMessage : TMessage); message wm_EndSession;
    ...
  public
    ...
  end;
.
.
.
procedure TForm1.EndSessionHandler(var AMessage : TMessage);
begin
  // Ausführen der für diesem Fall noch anstehenden Arbeiten

  inherited;
end;

Hawkeye219 1. Mai 2006 19:23

Re: Herausfinden ob Neustart, Herunterfahren oder Ruhemodus
 
Zitat:

Zitat von SirThornberry
Hast du schon im MSDN nach WM_ENDSESSION geschaut. Über das Result der Message sollte eigentlich geregelt werden ob der Vorgang abgebrochen wird oder nicht.

Bist du ganz sicher, oder verwechselst du das mit WM_QUERYENDSESSION?

SirThornberry 1. Mai 2006 19:25

Re: Herausfinden ob Neustart, Herunterfahren oder Ruhemodus
 
ich hab nach WM_ENDSESSION im MSDN gesucht. Dort steht wenn ich mich recht entsinne das 0 zurück gegeben werden soll wenn eine Anwendung die Message verarbeitet. Möchte man also den Effekt erzielen das die Message nicht verarbeitet wird sollte man nicht 0 zurück geben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz