Windows herunterfahren melden



  • hallo
    ich hab ein programm geschrieben. Dieses Programm rechnet manchmal im hintergrund ohne das der Benutzer etwas davon mitbekommt.
    Wenn der Benutzer jetzt den PC herunterfährt möchte ich dass dem Benutzer gesagt wird "achtung es wird gerade gerechnet, bitte nur abmelden".
    solche ähnlichen meldungen habe ich schon selbt oft von windows bekommen, zb. wenn noch programme offen waren und nicht gespeichert wurden oder so ähnlich.
    Weiss jemand wie das geht?
    vielen dank im vorraus
    Viele Grüsse



  • Ich glaube du bekommst die WM_QUERYENDSESSION, wenn Windows sich beenden will 🙂



  • ja und dann? wie gebe ich dann die meldung aus dass man sich bitte nur abmelden soll, dazu dann noch auf einen knopf drücken kann der dass herunterfahren verhindert?also meldung ausgeben weiss ich ja normalerweise, aber auch so dass die meldung steht und nicht heruntergefahren wird, bis mann sich eben für das herunterfahren entschieden hat oder nicht.



  • Die Meldung könnte ein Dialog oder eine MessageBox sein, zum Herunterfahren-verhindern kannst du dir mal die Nachricht bei der MSDN anschauen.



  • Xadine schrieb:

    Wenn der Benutzer jetzt den PC herunterfährt möchte ich dass dem Benutzer gesagt wird "achtung es wird gerade gerechnet, bitte nur abmelden".

    Dein Programm wird übrigens auch beim Abmelden beendet, wenn es sich nicht gerade um einen Dienst handelt.



  • zum dienst,
    ist es schwiereig bzw. aufwendig eine mfc anwedung zum dienst umzuschreiben?
    hab keine lust das ganze nochmal zu schreiben, hab monate gebraucht damit das ding läuft.
    ausserdem wenn ich mein programm in den taskplaner von windows hinzufüge und sage beim starten von windows(ohne anmeldung) starten dann funktioniert dass nicht so richtig bis jetzt. liegt das daran weil ich es nicht als dienst gemacht habe?
    gruss



  • WM_ENDSESSION sollte man dabei auch beachten (siehe MSDN).

    Zum Dienst:
    Wenn Du Deinen Code schön in Klassen verpackt hast, dann sollte es ja nicht so ein Problem sein. Allerdings kenne ich Deine Applikation nicht.

    Alternativ könnte man auch versuchen mit Hilfe von einem Tool aus dem Windows Resource Kit. Stichwort ist hier meine ich "srvany.exe"
    Damit habe ich aber null Erfahrungen. Andere Tools gab es dazu meine ich auch.


  • Mod

    Xadine schrieb:

    zum dienst,
    ist es schwiereig bzw. aufwendig eine mfc anwedung zum dienst umzuschreiben?
    hab keine lust das ganze nochmal zu schreiben, hab monate gebraucht damit das ding läuft.
    ausserdem wenn ich mein programm in den taskplaner von windows hinzufüge und sage beim starten von windows(ohne anmeldung) starten dann funktioniert dass nicht so richtig bis jetzt. liegt das daran weil ich es nicht als dienst gemacht habe?
    gruss

    Ein Dienst hat keine Oberfläche! Das sollte Dir erstmal klar sein.
    Was ist Dein Problem wenn der Task-Manager Dein Programm startet?



  • ich hab kein problem damit das der taskmanager mein programm startet. aber es wurde dochj hier geschrieben das mein programm bei der abmeldung eines benutzers auch beendet wird.


  • Mod

    Nur ein Dienst kann ohne Anmledunglaufen, aber ein Dienst hat keine GUI. Die GUI muss sperat zum Dienst in einem eigenen Programm laufen und per IPC mit dem Dienst kommunizieren.



  • mein programm hat jetzt aber eine gui, kann man daraus nun kein dienst mehr machen?



  • also ich google schon ne weile, trotzdem finde ich nicht das richtige.
    Im MFC klassenassistenten finde ich zb. OnCommand aber sowas wie OnQueryEndSession finde ich nicht. Wie kann ich denn jetzt in meinem MFC Dialog die WM_QUERYENDSESSION nachricht abfangen und darauf reagieren.

    hab code gefunden der so aussieht

    LRESULT CALLBACK DialogProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
        switch (message) // hier wird die nachricht abgefangen
    	{	
    		case WM_INITDIALOG:
                            // ...
    			return true; 
    
    		case WM_QUERYENDSESSION:
    			if(MessageBox(hwnd, "Soll Windows wirklich beendet werden?", "Test", MB_YESNO| MB_ICONQUESTION) == IDYES)
    			{
    				return false; // windows wird herruntergefahren...
    			}
    			return true; // windows wird weiterhin ausgeführt...
                    ...
             }
    }
    
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,	int nCmdShow)
    { 
    	DialogBox (hInstance, MAKEINTRESOURCE(IDD_MYFORM), 0, (DLGPROC) DialogProc);
    	return true;
    }
    

    weiss nicht wie ich damit umgehen muss in meinem dialog, hab ja zb, keine winmain
    aber die mfc hat ja auch ne nachrichtenverarbeitungsroutine, kann mir da jemand bitte 😕 helfen?


Anmelden zum Antworten