2009-08-06 5 views

Antwort

6

Es gibt keine tatsächliche Win32-Funktion, um dies zu überprüfen.

Stattdessen sendet Windows die Nachricht WM_QUERYENDSESSION an jede Anwendung, wenn ein Herunterfahren initiiert wird.

Sie können auf diese Nachricht antworten und beispielsweise das Herunterfahren abbrechen. (Obwohl Sie das nicht tun sollten, außer es ist absolut notwendig)

Vor dem eigentlichen Herunterfahren wird die Nachricht WM_ENDSESSION gesendet.

Sie sollten Ihre Bereinigung erst nach dieser Nachricht durchführen, da nicht garantiert ist, dass das System nach WM_QUERYENDSESSION tatsächlich heruntergefahren wird.

BEARBEITEN: Wenn Sie für diese Nachrichten von einem Service hören möchten, müssen Sie etwas mehr Arbeit hineinlegen.

Dienste haben normalerweise keine Fenster, so dass Sie nicht einfach in eine bestehende Fenster-Nachrichtenwarteschlange einhaken können. Stattdessen müssen Sie ein Dummy-Fenster erstellen, das nur für die Verarbeitung von Nachrichten und die Verarbeitung der oben genannten Nachrichten vorgesehen ist.

Weitere Informationen zu message-only windows finden Sie in der MSDN-Dokumentation.

+0

Wie kann ich das in einem Windows-Dienst (COM) überprüfen? – devnull

+1

Sie müssen dafür ein Dummy-Fenster erstellen und in seinem WindowProc nach diesen Nachrichten suchen. –

+1

Vielen Dank für die wunderbare Erklärung! – devnull

Verwandte Themen