Wenn Windows den Computer herunterfahren will/soll,
sendet es an alle Programme, dass sie sich beenden sollen.
Weigert sich ein Programm,
(wenn z.B. im OnCloseQuery-Ereignis der Form der Var-Parameter CanClose auf false gesetzt wird)
bricht Windows das herunterfahren ab. So einfach ist das.
Möchte man den Computer aber herunterfahren muss das Programm vorher beendet sein,
d.h. zum Beispiel im Falle der Datenbank, dass sie zunächst geschlossen und das Programm beendet sein muss, dann kann man Windows über Start->Beenden erneut dazu auffordern herunterzufahren.
Das ist natürlich nicht sehr schön.
Das Ziel wäre ja, dass das Programm Windows mitteilt,
dass es sich jetzt herunterfahren kann, wenn
-> Das Programm seine letzten Aufgaben erfüllt sind und
-> Windows herunterfahren wollte.
Bevor Windows ein Program herunterfährt sendet es die Nachricht WM_ENDSESSION an das Programm.
Man muss also eine neue Prozedur einführen, die diese Nachricht auswertet und an dieser Stelle entsprechend reagiert.
Quelltext
1:
| procedure WMEndSession(var Msg:TWMEndSession); message WM_ENDSESSION; |
overmoon