Abfrage bevor Konsolenfenster geschlossen wird



  • Gibt es eine Möglichkeit wenn das Programm geschlossen wird noch einen Befehl wie z.B

    cout << "Programm wird beendet." << endl;
    

    auszuführen?

    Also wenn man z.B den Prozess über den Taskmanager beendet wird "Programm wird beendet." ausgegeben.



  • Gehört eigentlich ins WinAPI-Forum.

    Enitin schrieb:

    ...über den Taskmanager beendet...

    Der Taskmanager ruft TerminateProcess auf und diese Methode ist genau so rabiat, wie sie sich auch anhört.

    Anders sieht es aus, wenn du auf Ctrl+C oder auf das Schließen des Fensters durch den Benutzer reagieren willst, da gibt es nämlich Möglichkeiten, Stichwort SetConsoleCtrlHandler .



  • So lange es nur ein Thread ist sehe ich da keine Möglichkeit.

    Vielleicht schickt der Windows-Task Manager irgendwelche speziellen Nachrichten herum, die man mit irgendwelchen Microsoft Bibliotheken abfangen kann... Eine plattformübergreifene unabhängige Lösung gibt es hier sicherlich nicht, da die Ausführung im Konsolenfenster per se nicht für Multitasking, also z. B. die Beendigung von Programmen über andere Programme, ausgelegt ist.

    Wenn das Konsolenfenster geschlossen wird, ist das für Dein Konsolenprogramm vereinfacht gesagt genauso, wie wenn der Computer ausgeschaltet wird.

    Wenn Du möchtest, dass Dein Programm beim Beenden etwas ausgibt, muss der Benutzer Dein Programm über eine von Dir eingebaute Beendigungs-Funktionalität beenden.



  • Hobo schrieb:

    Eine plattformübergreifene unabhängige Lösung

    ist auch völliger Humbug, wenn man bedenkt das etwas wie ein Task-Manager überhaupt nicht in allen Betriebssystemen enthalten ist (hat bspw. Mac einen? Oder die meisten Linux-Varianten?).



  • Hobo schrieb:

    Wenn das Konsolenfenster geschlossen wird, ist das für Dein Konsolenprogramm vereinfacht gesagt genauso, wie wenn der Computer ausgeschaltet wird.

    Nein, eben nich. SetConsoleCtrlHandler bietet eben für Konsolenanwendungen die gleiche Funktionalität wie WM_QUERYENDSESSION für Fensteranwendungen.



  • TerminateProcess ist so einfach nicht abzufangen, Betriebssystemunabhängig gleich gar nicht.

    SetConsoleCtrlHandler bietet eben für Konsolenanwendungen die gleiche Funktionalität wie WM_QUERYENDSESSION für Fensteranwendungen.

    Zeig mir mal die HandlerRoutine , die TerminateProcess abfangen kann bzw. bei TerminateProcess aufgerufen wird.

    Es ist ja der Sinn an TerminateProcess , dass man vor Programmende eben nicht noch irgendwas ändern kann und jemand, der einen Prozess über den Taskmanager killt hat dafür auch seine Gründe oder ist dämlich.



  • Der Tobi schrieb:

    `

    Zeig mir mal die [c]HandlerRoutine, dieTerminateProcess` abfangen kann bzw. bei TerminateProcess aufgerufen wird.

    Hast du eigentlich gelesen (und verstanden), was ich geschrieben habe?



  • Hast du eigentlich gelesen (und verstanden), was ich geschrieben habe?

    Wenn ich es wortwörtlich nehme, hat es nichts mit dem Thema zu tun.



  • Sone schrieb:

    hat bspw. Mac einen? Oder Linux-Varianten?

    Ja



  • manni66 schrieb:

    Sone schrieb:

    hat bspw. Mac einen? Oder Linux-Varianten?

    Ja

    Ja, jetzt wo ich es google sehe ich es.
    Hmm, wird vielleicht doch eine einigermaßen portable Lösung geben, irgendwo im Netz... irgendeine Lib...


Anmelden zum Antworten