NT lässt sich nicht mehr runterfahren nach Abfangen von WM_QUERYENDSESSION



  • Viele Onlineseiten habe ich geblättert, aber ich finde einfach keine Erklärung geschweige denn eine Lösung für mein Problem.
    Nur vorab: Der Code funktioniert einwandfrei auf 98, 2000 und XP.

    Ich gebe also in meiner Anwendung auf die WM_QUERYENDSESSION-Nachricht ein FALSE zurück und Windows beendet wie erwartet seinen Logoff/Shutdown-Process. So weit so gut. Doch was ich nun auch unternehme, NT lässt sich nicht mehr runterfahren!!! Weder mein Programm noch ich (manuell) vermag, das System runterzufahren. Es bleibt nur der fiese Druck auf den Knopf...

    Hat jemand einen Schimmer, warum NT sich so verhält und was ich dagegen tun kann?

    Vielen Dank im Voraus.
    Oli 😕



  • Gibst du auch ganz sicher TRUE zurück oder hast du NT abhängigen code?

    -junix



  • Ich gebe ganz sicher FALSE (0) zurück. Und zwar hier:

    [cpp]
    void __fastcall TForm1::NewWndProc(TMessage &Message)
    {
    switch( Message.Msg ){
    case WM_QUERYENDSESSION :

    if( (Message.LParam & ENDSESSION_LOGOFF) > 0){
    m_Logoff = true;
    }

    // Anwendung gibt FALSE zurück auf Anfrage nach Schließen
    // und läuft weiter
    Message.Result = 0;

    // ...
    break;

    default : WndProc(Message); break;
    }
    }[/cpp]

    Wenn ich diese Fensterprozedur zugewiesen habe, lande ich genau dort; NT hört auf runterzufahren, ermöglicht es aber dann auch fortan überhaupt nicht mehr. Nicht Sinn der Sache, denke ich... 🙄

    Bin für jeden Tipp dankbar.

    Oli

    P.S. Habe diesen Code nochmal als extra Anwendung getestet, um sicher zu gehen, dass es auch an nichts anderem liegt.



  • hm, sehr seltsam. Ich habe sehr ähnlichen Code unter Win NT verwendet. Da hat das ohne Probleme funktioniert:

    void __fastcall TForm_MainViewer::WndProc(Messages::TMessage &Message)
    {
    	if (Message.Msg == WM_QUERYENDSESSION)
    		Message.Result = false;
    	else
    		TForm::WndProc(Message);
    }
    

    Ich seh da keinen Unterschied zu deiner Version. Bei uns waren die meisten Rechner mit SP5 und einige mit SP6 versehen. Welches SP ist bei Dir installiert? Was hat das mit dem m_Logoff auf sich?



  • haben auch SP6 installiert.

    hab's auch noch mal mit

    Message.Result = false;
    

    probiert, aber keine chance.

    ich VERSTEH DAS EINFACH NICHT!

    😡

    Oli

    P.S. Mit m_Logoff merke ich mir nur, ob Windows nur den Nutzer abmelden will.



  • Wird vielleicht Dein Programm nicht richtig beendet und läuft im Hintergrund weiter?



  • Hast du ne Anwendung die mit mehreren Threads läuft?



  • Weder noch.

    der oli schrieb:

    P.S. Habe diesen Code nochmal als extra Anwendung getestet, um sicher zu gehen, dass es auch an nichts anderem liegt.

    Es funktioniert ja nicht mal einfach so.

    Oli


Anmelden zum Antworten