C++ で記述された GUI ベースのアプリからコンソールに出力できるようにする必要があったため、AttachConsole (ATTACH_PARENT_PROCESS) API とこのコードを使用することにしました。この方法はうまく機能しますが、コマンド プロンプト ウィンドウから GUI アプリを起動すると GUI アプリは正常に起動しますが、コマンド プロンプト ウィンドウを閉じると GUI アプリが終了します (閉じているのではなく、終了していることに注意してください)。このアプリの終了を防ぐ方法は?
2 に答える
誰かがコンソール ウィンドウを閉じたときに、アプリケーションが閉じないようにすることができます。
SetConsoleCtrlHandlerを呼び出して、これらのイベントをインターセプトするHandlerRoutineを設定する必要があります。
コンソール ウィンドウを閉じて、アプリを実行したままにしたい場合はFreeConsole
、HandlerRoutine
. それが機能しない場合は、コンソール ウィンドウが破棄されないようにメッセージを処理FreeConsole
し、ハンドラーから戻った後にアプリが呼び出されるようにするフラグまたはタイマーを設定します。
私が思い出したように、ユーザーがウィンドウの X を押したときにウィンドウが閉じるのを防ぐことはできません。それを防ぐために私がしたことは、ウィンドウメニューを変更することです。詳細については、 http://blog.mischel.com/2008/07/14/going-too-far-back/を参照してください。
この問題は、テキストをストリームに投稿する直前に親コンソールにアタッチし、stdout
それからデタッチすることで解決できました。このようにして、テキストは問題なく投稿され、コンソールは GUI アプリから分離されたままになります。
これは、それを使用したい人のための完全な実装を備えた MFC/C++ クラスです。