Autor |
Beitrag |
AScomp
      
Beiträge: 162
Delphi 5, Delphi 7, Delphi 2007, Delphi 2009, Delphi XE, Delphi 10 Seattle
|
Verfasst: Fr 08.04.05 04:55
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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
AScomp 
      
Beiträge: 162
Delphi 5, Delphi 7, Delphi 2007, Delphi 2009, Delphi XE, Delphi 10 Seattle
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
AScomp 
      
Beiträge: 162
Delphi 5, Delphi 7, Delphi 2007, Delphi 2009, Delphi XE, Delphi 10 Seattle
|
Verfasst: Fr 08.04.05 16:58
Auch auf diesem Wege nochmals herzlichen Dank! Sollte erstmal helfen! 
|
|
|