Autor Beitrag
af70
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 16.08.04 00:07 
Hallo,

ich würde gerne einen Reboot- bzw. Shutdown-Vorgang abfangen, einige Prozeduren durchführen und diesen dann fortsetzen. Durch WM_QUERYENDSESSION kann man wohl erkennen, dass das System heruntergefahren wird, jedoch nicht, ob es neu gestartet wird.

Weiss jemand, ob man es erkennen kann, dass ein Reboot (Neustart) initiiert wurde?

Danke

Andreas
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 16.08.04 00:27 
WM_QUERYENDSESSION liefert dazu leider keine Informationen. Womit es auf jeden Fall gehen müsste, wer ein API Hook (ExitWindowsEx-Funktion überschreiben), ist aber sicherlich zu hoch gegriffen.

P.S.: Was is'n eigentlich der Unterschied zwischen Runterfahren und Neustarten, außer, dass beim Herunterfahren vor dem Neustart (meist) etwas mehr Zeit vergeht?

_________________
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.
af70 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 16.08.04 00:38 
Zitat:

P.S.: Was is'n eigentlich der Unterschied zwischen Runterfahren und Neustarten, außer, dass beim Herunterfahren vor dem Neustart (meist) etwas mehr Zeit vergeht?


Stimmt, nur leider weiss ich nicht wie lange der User warten möchte und ob er die Power-Taste drücken will.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 16.08.04 00:54 
Naja,, im Allgemeinen sollte sowieso beim Runterfahren des Systems (egal ob Neustart oder nicht) ein Programm nicht länger als noch unbedingt notwendig arbeiten.

Wenn ich mich richtig erinnere wartet Windows standardmäßig 10 Sekunden auf eine Antwort bei der WM_QueryEndSession Botschaft (also, bis zur Rückgabe der Abarbeitung). Der Wert geht in der Registry einzustellen (müsste genauen Schlüssel raussuchen).

Aber im Endeffekt sollten sich deine Bearbeitungen auf <5 Sekunden beschrenken. Dass ist so der Wert, den ich als Anwender noch so akzeptieren tu. Alles was mir länger als diese Zeit die Möglichkeit zum Shutdown durch Windows bietet (weils hängt oder zu lange braucht) wird gekillt. Windows 2000 bietet für sowas nämlich schöne Funktionen an ;-)

_________________
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.
af70 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 16.08.04 01:03 
Zitat:
BenBE: ...wartet Windows standardmäßig 10 Sekunden auf eine Antwort bei der WM_QueryEndSession Botschaft...


Könnte reichen, muss ich erstmal checken. Danke.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 16.08.04 02:17 
Wo ist für dein Programm ein Unterschied zwischen eine Reboot und einem Runterfahren des Systems? Macht es für dein Programm einen Unterschied, ob der Computer jetzt 1 Sekunde aus ist oder 24 Stunden?
af70 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 16.08.04 10:25 
Luckie, der Unterschied ist, dass man nach einem Shutdown die Power-Taste drücken muss, siehe oben.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 16.08.04 10:35 
Nö. Ich drücke nie die Powertaste zum Stzarten des Rechners, bei mir reicht eine druck auf eine beliebige Taste der Tastatur zum Starten des Rechners aus.. Und wie merkt dein Programm, ob der Rechner mit der Powertaste gestartet wurde oder ob es sich um einen Neustart handelt?
af70 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 16.08.04 10:40 
Oder so. Auf jeden Fall ist ein Benutzereingriff notwendig. Mein Programm muss es nicht beim Starten des Systems merken, sondern beim Beenden des Systems.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 16.08.04 11:23 
Und warum? Ob nur Reboot oder Shutdown, die Vorgänge beim Runterfahren unterscheiden sich nicht.
af70 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 16.08.04 11:38 
Hat jemand eine Idee?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 16.08.04 12:04 
Ich verstehe es immer noch nicht. WARUM musst du wissen, ob das System runtergefahren und ausgeschaltet wird, oder ob ein Neustart erfolgt?
af70 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 16.08.04 12:37 
Ich will ja den Vorgang abbrechen und kurze Zeit später mit ExitWindowsEx selber übernehmen. Dazu muss ich aber wissen was initiiert wurde (was ich selber weiter machen muss) runterfahren oder neu starten.

Ich kann ja nicht den PC runterfahren, obwohl ein Neustart initiiert wurde. Der User würde sich doch verarscht fühlen.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 16.08.04 16:22 
Wie lange dauern denn die Aktionen? ERs sollte kein Problem sein Suche im MSDN WM_QUERYENDSESSION abzufangen, seinen eigenen Code auszuführen und dann TRUE zurückzugeben.
af70 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 17.08.04 12:23 
BenBE:
Zitat:
Wenn ich mich richtig erinnere wartet Windows standardmäßig 10 Sekunden auf eine Antwort bei der WM_QueryEndSession Botschaft (also, bis zur Rückgabe der Abarbeitung). Der Wert geht in der Registry einzustellen (müsste genauen Schlüssel raussuchen).


Luckie:
Zitat:
ERs sollte kein Problem sein WM_QUERYENDSESSION abzufangen, seinen eigenen Code auszuführen und dann TRUE zurückzugeben.


Geht leider nicht. Ich muss einen Bereinigungsprozess starten. Diseser wird im Shutdown-Modus nicht gestartet. Ich muss also bei WM_QUERYENDSESSION ein False zurückgeben. Und mein Bereinigungsprozess soll dann mit dem Runterfahren weitermachen.

Also wie kann man unterscheiden, ob der PC gerade runtergefahren oder neu gestartet wird?
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Di 17.08.04 12:43 
af70 hat folgendes geschrieben:
Also wie kann man unterscheiden, ob der PC gerade runtergefahren oder neu gestartet wird?
Nicht mit WM_QUERYENDSESSION und auch nicht mit WM_ENDSESSION. Einzige Möglichkeit dürfte sein, was BenBE schon vorgeschlagen hat:
BenBE hat folgendes geschrieben:
WM_QUERYENDSESSION liefert dazu leider keine Informationen. Womit es auf jeden Fall gehen müsste, wer ein API Hook (ExitWindowsEx-Funktion überschreiben),(...)


raziel

_________________
JSXGraph
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 17.08.04 12:45 
Hallo!

Eine Lösung habe ich auch nicht, aber vielleicht erläuterst du einfach mal, was genau du mit diesem "Reinigungsprozess" machen willst, und warum das unbedingt nur bei einem Neustart möglich ist, nicht jedoch bei einerm Shutdown. Ich bin da wohl genauso irritiert wie Luckie und kann mir absolut keinen Fall vorstellen, wo das so sein müsste...

Cu,
Udontknow
af70 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 17.08.04 13:18 
Mein Reinigungsprozess beendet u.a. Prozesse und dienste in einer bestimmten Reihenfolge, weil zwischen diesen Client-Server-Beziehungen bestehen, um einen sauberen Abschluss zu haben. Grund: Bei Diensten kann es durch Abhängigkeiten gesteuert werden, die Anderen beendet Windows durcheinander.

Der Reinigungsprozess soll beim Runterfahren und beim Neustart durchgeführt werden, das ist keine Frage. Die Frage ist, was der Reinigungsprozess nach der Bereinigung tun soll: runterfahren oder neustarten?

Klar, ich könnte diese Bereinigung auch von dem Modul aus machen, welches die Nachricht WM_QUERYENDSESSION bekommt, aber dann muss ich da diese Funkionalität implementieren und das ist unnötiger Balast, wenn es schon ein fertiges Modul gibt.

Ich muss mich wohl informieren, wie ein API Hook geht. Kann mir jemand einen Link schicken?
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Di 17.08.04 13:25 
af70 hat folgendes geschrieben:
Ich muss mich wohl informieren, wie ein API Hook geht. Kann mir jemand einen Link schicken?

Ein wirklich einfaches, verständliches und leicht modifizierbares API Hook-Beispiel findest Du im SwissDelphiCenter-Forum:
www.swissdelphicente...viewtopic.php?t=2755

raziel

_________________
JSXGraph