Auf Herunterfahren reagieren
-
Ich möchte auf das Herunterfahren reagieren. Dafür habe ich folgenden Code geschrieben:
Hier ist die Nachrichtenschleife:
MSG msg; while(GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); }
Und hier die Fensterprozedur (mein Programm benutzt gar kein Fenster):
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) // hier wird die nachricht abgefangen { case WM_QUERYENDSESSION: if(MessageBox(hwnd, "Soll C:\\HI wirklich erstellt werden?", "Test", MB_YESNO| MB_ICONQUESTION) == IDYES) { MessageBox(0,"Ciao!",0,0); } return true; } return DefWindowProc (hwnd, message, wParam, lParam); }
Ich habe mehrmals die Session beendet, um zu sehen, ob es funktioniert hat. Es hat aber nie funktioniert. Warum und was tun, damit es geht?
Danke.
-
Du musst mindestens ein Fenster auch erzeugen!
Lies die Doku:
WM_QUERYENDSESSION
http://msdn.microsoft.com/en-us/library/aa376890(VS.85).aspxWM_QUERYENDSESSION wird nur an Top-Level-Fenster versendet.
Wenn Du kein Fenster hast, woher soll denn Windows wissen, dass es Dir eine Nachricht schicken soll?
-
gruss
gibt es auch eine möglichkeit auf das herunterfahren des systems zu reagieren, inerhalb eines consolen programmes.?
-
Ja. Du erzeugst ein (unsichtbares) Fenster...
Oder verwendest SetConsoleCtrlHandler...
-
Jochen Kalmbach schrieb:
Oder verwendest SetConsoleCtrlHandler...
In dem Fall aber Achtung! Die Handler Funktion wird dann in einem eigenen Threadkontext ausgeführt.