Welche Funktion hat Win32, um zu prüfen, ob eine Abschaltung eingeleitet wurde oder nicht?Prüfen, ob eine Abschaltung eingeleitet wurde oder nicht
EDIT: Ich muss das in einem Windows-Dienst (COM) überprüfen. Wie geht das?
Welche Funktion hat Win32, um zu prüfen, ob eine Abschaltung eingeleitet wurde oder nicht?Prüfen, ob eine Abschaltung eingeleitet wurde oder nicht
EDIT: Ich muss das in einem Windows-Dienst (COM) überprüfen. Wie geht das?
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.
Wie kann ich das in einem Windows-Dienst (COM) überprüfen? – devnull
Sie müssen dafür ein Dummy-Fenster erstellen und in seinem WindowProc nach diesen Nachrichten suchen. –
Vielen Dank für die wunderbare Erklärung! – devnull