Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Auf Herrunterfahren reagieren (https://www.delphipraxis.net/90395-auf-herrunterfahren-reagieren.html)

ghost007 16. Apr 2007 18:44


Auf Herrunterfahren reagieren
 
Hallo,
kann man auf das herrunterfahren von windows reagieren?

MfG - Ghost007

CalganX 16. Apr 2007 18:52

Re: Auf Herrunterfahren reagieren
 
MSDN-Library durchsuchenWM_QUERYENDSESSION / MSDN-Library durchsuchenWM_ENDSESSION
Zwei Nachrichten zum Abfangen...

Chris

phreax 16. Apr 2007 20:28

Re: Auf Herrunterfahren reagieren
 
Zitat:

Zitat von CalganX
Zwei Nachrichten zum Abfangen...

Leider werden diese Messages bei jeder Abmeldung ausgelöst, was nicht umbedingt heisst, das Windows heruntergefahren wird.

mfg phreax

ghost007 16. Apr 2007 20:32

Re: Auf Herrunterfahren reagieren
 
hm, für meine problematik sind sie aber völlig ausreichend, danke ;)

>>Erledigt<<

BenjaminH 16. Apr 2007 20:43

Re: Auf Herrunterfahren reagieren
 
Zitat:

Zitat von phreax
Leider werden diese Messages bei jeder Abmeldung ausgelöst, was nicht umbedingt heisst, das Windows heruntergefahren wird.

Zumindest abmelden und herunterfahren kann unterschieden werden, wenn man sich lParam mal ansieht:
http://msdn2.microsoft.com/en-us/library/aa376890.aspx

phreax 16. Apr 2007 21:01

Re: Auf Herrunterfahren reagieren
 
Zitat:

Zitat von BenjaminH
Zumindest abmelden und herunterfahren kann unterschieden werden, wenn man sich lParam mal ansieht:
http://msdn2.microsoft.com/en-us/library/aa376890.aspx

man lernt nie aus ;) Findet bestimmt mal Verwendung...

danke phreax

ghost007 17. Apr 2007 17:50

Re: Auf Herrunterfahren reagieren
 
hab jetzt was gefunden, kann das so funktionieren?

Delphi-Quellcode:
procedure WMQueryEndSession(var Msg: TMessage); message WM_QUERYENDSESSION;
procedure WMEndSession(var Msg: TMessage); message WM_ENDSESSION;

procedure TfrmMain.WMQueryEndSession;
begin
 ShowMessage('1');
end;

procedure TfrmMain.WMEndSession;
begin
 ShowMessage('2');
end;
weil bei mir funktioniert das nicht ^^

phreax 17. Apr 2007 18:26

Re: Auf Herrunterfahren reagieren
 
Also bei mir funktioniert folgendes hervorragend:

Delphi-Quellcode:
//....

private //von der Form
procedure WMEndSession(var Msg:TWMEndSession); message WM_ENDSESSION;

//...


procedure Form.WMEndSession(var Msg:TWMEndSession);
begin
showmessage('1');
end;
mfg phreax

ghost007 18. Apr 2007 21:01

Re: Auf Herrunterfahren reagieren
 
hi,
der code funktioniert wunderprächtig :D
aber, frage, kann ich auch abfangen, ob der user rebooten,herunterfahren oder sich nur abmelden will?

CalganX 18. Apr 2007 21:04

Re: Auf Herrunterfahren reagieren
 
Lies den Beitrag aufmerksam... dann wärst auf diesen Link gestoßen: http://msdn2.microsoft.com/en-us/library/aa376890.aspx

Chris

ghost007 18. Apr 2007 21:13

Re: Auf Herrunterfahren reagieren
 
imho kann ich da aber nicht zwischen rebooten und herunterfahren unterscheiden, oder irre ich?

phreax 18. Apr 2007 21:14

Re: Auf Herrunterfahren reagieren
 
hmm.. tja Delphi hat die Parameter nicht wie im Link übersetzt, also weiss ich nicht welcher Parameter welcher ist, und ich habe keien Lust meinen PC jetzt neuzustarten ;)

versuche mal folgendes:

Delphi-Quellcode:
private //von der Form
  procedure WMQueryEndSession(var Msg:TWMQueryEndSession); message WM_QUERYENDSESSION;

procedure TForm.WMQueryEndSession(var Msg:TWMQueryEndSession);
begin
showmessage('2');
if msg.Unused = 0 then ShowMessage('Herunterfahrn/reboot'); //vllt. mal etwas mit den paramtern rumspielen...
end;
mfg phreax

ROTER KASTEN:
Ich hab mal versucht den msdn Beitrag anzuwenden ;)

phreax 18. Apr 2007 21:17

Re: Auf Herrunterfahren reagieren
 
Zitat:

Zitat von ghost007
imho kann ich da aber nicht zwischen rebooten und herunterfahren unterscheiden, oder irre ich?

Nein kann man nicht, ist doch eigentlich nicht von Bedeutung ich kann meinen Pc auch manuell aus und gleich wieder abschalten, das macht für keine Anwendung einen Unterschied, höchsten Viren könnten Gefallen an einem Warmstart finden ;)

mfg phreax

ghost007 18. Apr 2007 21:34

Re: Auf Herrunterfahren reagieren
 
Zitat:

Zitat von phreax
ROTER KASTEN:
Ich hab mal versucht den msdn Beitrag anzuwenden ;)

was is bitte "ROTER KASTEN" ?? ^^

CalganX 18. Apr 2007 21:39

Re: Auf Herrunterfahren reagieren
 
http://www.delphipraxis.net/internal...=315623#315623 Ganz unten.
Und jetzt ist gut für heute. :roll: Problem gelöst, wenn es keine weiteren Fragen dazu gibt, dann braucht auch hier kein Post mehr dazu entstehen. Danke.

Chris

Dezipaitor 3. Mai 2007 11:26

Re: Auf Herrunterfahren reagieren
 
Ich darf noch darauf hinweisen, dass unter Vista ein Prozess nicht mehr das Herunterfahren blockieren oder verhindern kann.
Wenn der Prozess diese Nachricht bekommt, dann hat er ungefähr 3 Sekunden (wenn er nicht auf Nachrichten reagiert), um seine Daten zu sichern, bevor Vista ihn zwangsterminiert.
Diese Maßnahme soll helfen, das Benutzergefühl, beim Herunterfahren (auch beim Suspend) zu verbessern.

Dienste können spezielle Einstellungen vornehmen, die es Ihnen erlauben auch länger zu benötigen.

ghost007 20. Mai 2007 22:37

Re: Auf Herrunterfahren reagieren
 
dann ist das ja in vista schon eingebaut, was mein problem ist. ich hab nämlich ein proggi geschreiben, wenn dieses jedoch läuft und man runterfährt, muss man 2mal den runterfahr dialog ausführen, weil der erste es nicht "schafft" das programm zu elemenieren. Ich hab das nun so gelöst, das ich die herunterfahr message wie in diesem topic beschreiben abfange, das programm schließe und einen herunterfahrbefehl rausschick. Aber das problem ist, das er auch nur herunterfehrt, wenn man sich nur abmeldet bzw. auch herunterfährt, wenn man rebooten will. deshalb such ich immer noch eine möglichkeit zu erkennen, was der user gedrückt hat(shutdown | reboot | logoff). Kann mir keiner helfen ? :(

MfG - Ghost007

ghost007 21. Mai 2007 19:41

Re: Auf Herrunterfahren reagieren
 
*PUSH*

Apollonius 21. Mai 2007 20:08

Re: Auf Herrunterfahren reagieren
 
Ist das nicht schon zigmal beantwortet worden? Herunterfahren und Neustarten sind nicht zu unterscheiden, Abmelden hat einen eigenen lparam.

ghost007 21. Mai 2007 20:38

Re: Auf Herrunterfahren reagieren
 
hm, ok. danke.
aber wie hinder ich dann mein programm daran, den shutdown/reboot zu verzögern/verhindern?

MfG - Ghost007

ghost007 23. Mai 2007 21:14

Re: Auf Herrunterfahren reagieren
 
*PUSH*

CalganX 23. Mai 2007 21:48

Re: Auf Herrunterfahren reagieren
 
Hi,
dass du den Shutdown/Reboot verhinderst, kann verschiedene Ursachen haben und wird wahrscheinlich nicht mehr mit der Ausgangsfrage zusammenhängen. Bitte eröffne dafür einen neuen Thread und biete doch ein paar mehr Infos. Die Wahrscheinlichkeit, dass du dann eine Antwort bekommst, ist dann größer.

Chris

Bebe 23. Mai 2007 23:50

Re: Auf Herrunterfahren reagieren
 
Zitat:

Zitat von ghost007
.. muss man 2mal den runterfahr dialog ausführen, weil der erste es nicht "schafft" das programm zu elemenieren.

So wie sich das anhört möchtest du die Symptome abstellen, nicht aber die Ursache. Du solltest nicht ein Weg finden, wie dein Programm beim Runterfahren beendet wird, sondern Ziel sollte es sein "fehlerfrei" ein Programm zu beenden. Auch im Fall des Shut Downs.
Wie beendest du dein Programm normal? Ich meine z. B. ob du eine eigene Procedure erstellt hast, die beim Beenden deines Programmes nicht verwendet wird. Welche Methoden verwendest du dafür?

Ich vermute mal, das du nicht alle Objekte korrekt schließt.

Gruß
Matze

ghost007 14. Jun 2007 19:38

Re: Auf Herrunterfahren reagieren
 
also,
das problem scheint in einer von mir benutzten kompo zu liegen, der destructor scheint nicht sauber gecodet zu sein.
ohne die kompo beendet windows 1a.
hab das jetzt so "gelöst" das ich zumindest zwischen logoff und reboot/shutdown unterscheiden kann, wenns jmd interessiert, hier der source.

Delphi-Quellcode:
.
.
.
  private
    procedure WMEndSession(var Msg:TWMEndSession); message WM_ENDSESSION;
.
.
.

procedure TfrmMain.WMEndSession(var Msg:TWMEndSession);
begin
if msg.Unused = 0 then //d.h. es ist ein reboot/shutdown
 begin
  //code
 end
else                 //d.h. es ist ein logoff
 begin
  //code
 end;
end;
MfG - AuspeX


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.

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