Einzelnen Beitrag anzeigen

TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Herunterfahren Blockieren

  Alt 17. Feb 2006, 20:29
Die Funktionsweise der WM_QueryEndSession/WM_EndSession-Messages hat sich ab W2k geändert. Davor, bei Win95 z.B., bekamen bei einem eingeleiteten ShutDown alle laufenden Applications jeweils zuerst mal eine solche WM_QueryEndSession-Message zugeschickt. Und erst nachdem sämtliche Applications diese Message dann auch mit TRUE beantwortet hatten schickte das System dann an jede noch ein eine WM_EndSession-Message hinterher, wodurch die Apps dann beendet wurden und sich das System anschließend heruntergefahren hat.

Ab W2k ist es jetzt aber so, dass jede einzelne Application nun zuerst komplett (mit WM_QueryEndSession u. WM_EndSession) zu Ende abgehandelt wird, bevor überhaupt eine jeweils nächste App diesbezüglich erst an der Reihe ist, bearbeitet zu werden. Es kann jetzt also durchaus so sein, dass schon 3 Applications befragt wurden, ein TRUE antworteten und sich danach geclosed haben und eine vierte Application diese Query dann verneint und der ShutDown-Prozess damit insgesamt noch abgebrochen wird.

Warum MS das so geändert hat? No Idea. Das frühere Verfahren fand ich jedenfalls auch irgendwie etwas schlüssiger.

Ein ShutDown ist aber insgesamt trotzdem einigermaßen einfach verhinderbar. Und zwar mittels eines Programms welches sich der Api-Funktion 'SetProcessShutdownParameters' bedient. Damit kannst du nämlich für den Fall eines ShutDowns bestimmen, an welcher Position in der Abfragereihenfolge dein Programm angesiedelt sein soll. Wählst du diese Position also so aus, dass dein Prog immer als erstes diese WM_QueryEndMessage bekommt, und beantwortest du diese dann jedesmal mit FALSE, so dürfte jeder normale ShutDown-Prozess damit relativ einfach blockierbar sein.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat