Windows herunterfahren sperren?



  • Hi Leute,

    kann man irgendwie verhindern, dass man Windows herunterfahren kann, solange mein Programm noch läuft?

    mfg
    Tom



  • private: 
       void __fastcall WndProc(Messages::TMessage &Message);
    

    CPP Datei:

    void __fastcall TForm1::WndProc(Messages::TMessage &Message) 
    { 
       bool handled = false; 
       if (Message.Msg == WM_QUERYENDSESSION) 
       { 
          Message.Result = false; 
          ShowMessage("Windows kann nicht beendet werden. Beenden Sie zuerst das Programm."); 
          handled = true; 
       } 
       if (!handled) 
          TForm::WndProc(Message); 
    }
    


  • Ja, sollte man meinen...
    Funktiniert aber unter Windows XP so nicht. XP blendet dann den Dialog Programm reagiert nicht ein und fährt trotzdem herunten...
    Eine Lösung kann ich aber leider auch nicht anbieten.



  • Joe_M. schrieb:

    Ja, sollte man meinen...
    Funktiniert aber unter Windows XP so nicht. XP blendet dann den Dialog Programm reagiert nicht ein und fährt trotzdem herunten...
    Eine Lösung kann ich aber leider auch nicht anbieten.

    Bei mir funktioniert das schon ....
    Natürlich nur StandAlone.



  • gerade mal probiert.
    Funktioniert unter Win98, NT, 2000, XP



  • Ganz schlechte Idee: Dein Programm hat sich nach dem Betriebssystem zu richten und nicht umgekehrt! Außerdem: Wenn das OS runterfahren will, dann i.d.R. weil der Benutzer das will, und wenn sich ein Programm quer stellt, dann wandert es auf direktem Wege ins Software-Nirvana.



  • @Reyx:

    Is ja schön und gut, nur braucht das Programm länger als ihm Windows Zeit gibt, bis alle Threads beendet sind und so will ich vorher das Programm "sauber" beenden und dann erst Windows herunterfahren.



  • Hallo

    ich gebe Reyx recht. Das sperren des Herunterfahrens ist unsauber.
    Besser ist wenn du die Threads optimierst, das die schneller beenden.

    bis bald
    akari



  • Ganz schlechte Idee: Dein Programm hat sich nach dem Betriebssystem zu richten und nicht umgekehrt!

    Wer legt das fest ?



  • Besser ist wenn du die Threads optimierst, das die schneller beenden.

    Leider nicht immer machbar.

    Das sperren des Herunterfahrens ist unsauber.

    Nein, es gibt nur Leute, die dieses Meinung tief verinnerlicht haben.



  • Threads optimieren geht meiner Meinung nach nicht, bis die Hardware fertig ist, dauerts halt mal, da kannst du machen was du willst.

    Wie würde man so was denn grundsätzlich angehen, ich meine man schreibt doch für eine Aufgabenstellung sowieso nur den notwendigsten Code oder?

    mfg
    Tom



  • Hallo

    downer schrieb:

    Nein, es gibt nur Leute, die dieses Meinung tief verinnerlicht haben.

    Wie würdest du es finden, wenn du dein Auto anhalten willst, das aber nicht langsamer wird weil das Radio läuft?
    Natürlich mag das Geschmackssache sein, ob ein Programm das Herunterfahren verhindern kann. Ich würde jedenfalls weder so ein Programm schrieben noch besitzen wollen.

    Tom7 schrieb:

    Wie würde man so was denn grundsätzlich angehen, ich meine man schreibt doch für eine Aufgabenstellung sowieso nur den notwendigsten Code oder?

    Notwendiger Code ist nicht unbedingt der effizienteste Code.
    Es gibt immer noch Möglichkeiten zu Optimieren, vor allem wenn es um Sonderfälle geht wie Beenden. Das erfordert aber meistens noch Umbauten an der Basis des Codes.

    bis bald
    akari



  • Ich würde jedenfalls weder so ein Programm schrieben noch besitzen wollen.

    Dann kannst du gleich damit anfangen den Builder zu deinstallieren.
    Was macht den der Borland Builder wenn du ohne zu speichern runterfahren willst ?

    Und wie würdest du es finden, wenn du fast jedesmal wenn du dein Auto anhälst, deine noch nicht gespeicherten Radiosender im Radio flöten gehen?



  • Hallo

    das kannst du nicht vergleichen.
    Das eine ist eine rein Programm-interne Abfrage und läßt sich auch sehr leicht selber erstellen (OnCloseQuery). Das heißt das ist normales definiertes Verhalten.

    Aber der OP sagt ja

    XP blendet dann den Dialog Programm reagiert nicht ein und fährt trotzdem herunten...

    und das ist eine echte System-Fehlermeldung eines blockierenden Programmes.

    Ich erwarte eben das wenn ich das System beende (anhalte), das alle Subsystem eben geordnet (meinetwegen mit Nachfrage) sich beenden.
    Aber nicht das das herunterfahren ganz verweigert wird!

    bis bald
    akari



  • Hallo

    das kannst du nicht vergleichen.
    Das eine ist eine rein Programm-interne Abfrage und läßt sich auch sehr leicht selber erstellen (OnCloseQuery). Das heißt das ist normales definiertes Verhalten.

    Das kann man schon vergleichen.
    Mit OnCloseQuery hat das garnichts zu tun.Das wird nämlich beim Herunterfahren garnicht aufgerufen.

    Aber nicht das das herunterfahren ganz verweigert wird!

    Im Normalfall hindert man Windows auch nur solange am herunterfahren, bis man seine Sachen sauber beendet hat.



  • Hallo

    Mit OnCloseQuery hat das garnichts zu tun.Das wird nämlich beim Herunterfahren garnicht aufgerufen.

    Ich habe mir gerade eine neue App erstellt und in OnCloseQuery eine MessageBox anzeigen lassen. Dann habe ich bei geöffnetem Programm Windows herunterfahren lassen... und wie erwartet erscheint die MessageBox, und nach dem Schließen dieser fährt das System herunter.
    Und dabei wartet Windows ganz brav mit dem Herunterfahren, nichts blockiert.
    Im gegensatz zu dem Programm vom OP, wo sich Windows die Meldung bringt, das es blockiert!

    Im Normalfall hindert man Windows auch nur solange am herunterfahren, bis man seine Sachen sauber beendet hat.

    Ich bin aber eher der Typ, der am Problem selber arbeitet als an den Symptomen.
    Und das Problem ist das zu langsame Beenden des Programms, die Fehlermeldung von Windows das Symptom.

    bis bald
    akari



  • und um mehr gehts mir dabei auch gar nicht.

    mfg
    Tom

    PS: Hat jemand Vorschläge wie ich das sauber hinbringe?



  • Wo ist jetzt das Problem ?
    Wie du Windows am herunterfahren hinderst weisst du dank downer doch jetzt.
    Warum du Windows warten lassen möchtest wissen wir aber nicht.



  • Egal, wie nun die Philosophie ist:

    Du musst dann halt damit rechnen, dass dir das System weggezogen wird.

    Außerdem wird ExitWindowsEx mit EWX_FORCE aufgerufen fragt Windows beim runterfahren überhaupt nicht nach


Anmelden zum Antworten