Entwickler-Ecke

Windows API - Windows beenden abfangen


Ich Bins - Di 17.02.04 23:40
Titel: Windows beenden abfangen
Hi!
Wie kann ich bei Windows XP das Ereignis abfangen, wenn ich auf Start beenden und dann auf herunterfahren bzw. neustarten klicke?
Ich hatte mir vorgestellt das beim Klicken auf Herunterfahren / Neustarten eine Abfrage (MessageDlg oder so) kommt bei der ich dann bestätigen kann ob Windows heruntergefahren werden soll oder nicht!

Vielen Dank schon mal im Vorraus für alle Tips!

Moderiert von user profile iconTino: Topic verschoben.


Popov - Mi 18.02.04 01:06

In der Regel reicht schon bei deinem Programm in Suche in: Delphi-Forum, Delphi-Library ONCLOSEQUERY CanClose auf False zu setzen um Windows beim runterfahren zu hindern. Diese Möglichkeit ist dazu gedacht, daß, falls ein Programm seine Daten nicht abgespeichert hat, nicht einfach ungefragt das Programm beendet werden kann. Also beendet Windows vor dem Runterfahren zuerst alle Programme. Falls sich ein Programm weigert, dann wird Windows nicht beendet.

Ob das aber auch für XP gilt weiß ich nicht.


Delete - Mi 18.02.04 01:20

Etwas unelegant und mit dem Parameter EWX_FORCE hilft dir das auch nichts mehr.

Sicherer ist: Windows fragt vorher selber nach, ob die Session beendet werden darf. Es schickt dazu an alle Toplevel-Fenster ein Suche in: Delphi-Forum, Delphi-Library WM_QUERYENDSESSION, sollte auch nur ein Fenster hier kein grünes Licht geben, wird die Session nicht beendet. Geben alle Fenster hier ihr "Go", kommt von Windows noch mal ein Suche in: Delphi-Forum, Delphi-Library WM_ENDSESSION, hier kann eine Anwendung noch was machen, aber das Beenden nicht mehr unterbrechen.


Ich Bins - Mi 18.02.04 21:45

Danke, hat so weit schon mal ganz gut geklappt!
Die einzige Frage die sich mir noch stellt ist folgende:
Wie kann ich Windows jetzt dazu bringen, dass er zuerst mein Programm fragt und nicht vorher schon alle anderen Programme beendet, sonst bringt mir das nicht allzuviel, wenn alles zu ist, außer Windows!


Delete - Do 19.02.04 02:23

Gar nicht. Die Reihenfolge ist wohl willkürlich. Geht mir mit ICQ auch so. Wenn ich noch einen Message-Request habe und ich fahre Windows runter, dann meldet sich ICQ noch mal deswegen und dann kann es passieren, dass der Virenscanner schon beendet ist und das Icon aus der TNA verschwindet, wenn ich auf ICQ reagiere.


Timosch - Di 01.06.04 16:01

Probiers mal mit "shutdown -a" (über ShellExecute ausführen)


Delete - Di 01.06.04 16:39

Ich glaube nicht, dass er nach gut 4 Monaten nach eine Chance hat, seinen Rechner vom Februar-Herunterfahren abzuhalten. ;)