2009-02-26 8 views
9

Ich möchte in der Lage sein 1. zu erkennen (und, falls erforderlich, 2. abbrechen) OS Herunterfahren von meiner Anwendung, vorzugsweise mit dem Windows-API.Wie Herunterfahren in Windows (XP | Vista) programmatisch abbrechen?

Ich weiß, dass es möglich ist, Herunterfahren manuell mit dem Befehl shutdown -a abzubrechen Im schlimmsten Fall konnte ich ShellExecute dies, aber ich frage mich, ob es eine bessere Möglichkeit, das Herunterfahren programmatisch zu verhindern.

Vielleicht wäre es genug, um programmatisch benachrichtigt zu werden, dass das Betriebssystem kurz vor dem Herunterfahren steht - wie geht das?

Antwort

6

Von MSDN:

WM_QUERYENDSESSION Die Nachricht wird gesendet, wenn der Benutzer wählt, die Sitzung oder wenn eine Anwendung ruft eine der System Abschaltfunktionen zu beenden. Wenn eine Anwendung Null zurückgibt, wird die Sitzung nicht beendet. Das System sendet keine Nachrichten mehr WM_QUERYENDSESSION, sobald eine Anwendung Null zurückgibt.

Also, meine Anwendung WindowProc bearbeitet nun den WM_QUERYENDSESSION Nachricht und gibt 0.

Ich habe nicht erwartet, dass es so einfach ist; als Bonus funktioniert es auch unter Windows 2000.

+0

Schön, das muss übrigens kein Community-Wiki sein. :) – BobbyShaftoe

+0

Nun, es ist richtig * genug * für mich. Möglicherweise gibt es einige Macken oder erweiterte Operationen für diese Nachricht, und CW ermöglicht mehr Personen zum Bearbeiten. – Piskvor

1

In Bezug auf "einfach" 0 zurück zu einem Shutdown zu blockieren, ist es nicht so einfach, wenn Sie es auf die richtige Weise tun möchten. Vor allem auf Vista. Zum Beispiel lies bitte auch http://msdn.microsoft.com/en-us/library/ms700677(VS.85).aspx

+0

Der Artikel scheint zu sagen "es ist auf Vista viel komplizierter: Anwendungen, die das Herunterfahren blockieren müssen, sollten das neue Shutdown-API verwenden." Niemals im gesamten Artikel erwähnt es eine "richtige" Art, dies auf XP zu handhaben. Habe ich etwas verpasst? – Piskvor