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.


  • Mod

    Du musst mindestens ein Fenster auch erzeugen!
    Lies die Doku:
    WM_QUERYENDSESSION
    http://msdn.microsoft.com/en-us/library/aa376890(VS.85).aspx

    WM_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...


  • Mod

    Jochen Kalmbach schrieb:

    Oder verwendest SetConsoleCtrlHandler...

    In dem Fall aber Achtung! Die Handler Funktion wird dann in einem eigenen Threadkontext ausgeführt.


Anmelden zum Antworten