Entwickler-Ecke

Windows API - Unterscheiden zwischen Windows-Shutdown und Windows-Reboot?


AScomp - Fr 08.04.05 04:55
Titel: Unterscheiden zwischen Windows-Shutdown und Windows-Reboot?
Hi,

gibt es eine Möglichkeit, zwischen einem Windows-Shutdown und einem Windows-Reboot zu unterscheiden?

Im WM_QUERYENDSESSION gibt es offensichtlich keine Möglichkeit (auch laut MSDN nicht).

Zur Erklärung: vor dem Herunterfahren soll mein Programm eine bestimmte Aktion durchführen, die durchaus 5-10 Minuten beanspruchen kann. Gibt die Anwendung so lange keine Rückmeldung an Windows im WM_QUERYENDSESSION, so wird das Programm automatisch geschlossen bzw. es kommt "Anwendung reagiert nicht". Außerdem wird WM_QUERYENDSESSION eben auch beim Reboot ausgelöst.

Ein Hook auf ExitWindows und ExitWindowsEx wäre wohl die Notlösung, gefällt mir allerdings überhaupt nicht - gibt's andere/bessere Lösungen?


BenBE - Fr 08.04.05 11:57

Zumindest keine, die man so ohne weiteres realisieren könnte.

AFAIK wird alles an Infos, was die WinAPI verarbeitet im Kontext des Programms oder anderer Datenspeicher abgelegt. Diese kann man über ASM abfragen; Allerdings ist dies Win-Versionsabhängig, bei ExitWindowsEx nicht.

Ansonsten: API debuggen und gucken, wo er den Wert des Parameters
Reboot oder hutdown gespeicher wird.


AScomp - Fr 08.04.05 16:32

Hallo,

du hattest in einem ähnlichen Thread mal davon geschrieben, dass man den Zeitwert ändern kann, den Windows bei QueryEndSession abwartet, bis das Programm reagiert. Habe im Internet leider nichts dazu finden können - kannst du mir den Registry-Key nennen, wo das gespeichert wird?


BenBE - Fr 08.04.05 16:51

Zu finden sind die Werte der "Hanging Process Detection unter

Key: HKCU\Control Panel\Desktop\
User-Initiated: HungAppTimeout
Sys-Initiated: WaitToKillAppTimeout

Achtung: Werte sind in Millisekunden. Die Werte müssen AFAIC REG_SZs sein.

HTH.

Quelle: Xteq X-Setup 6.0


AScomp - Fr 08.04.05 16:58

Auch auf diesem Wege nochmals herzlichen Dank! Sollte erstmal helfen! :D