特定のバッチファイルを実行して、そのコンソール出力をVisual C ++のテキストコントロールにリダイレクトするか、ログ/エコーの表示と同時にコンソール出力をリダイレクトしたいと思います。
3 に答える
基本的に、パイプに書き込み、このパイプの出力を読み取る実行プロセスを作成する必要があります。
[編集] SciTE がそれを行う方法を知っています (ソース: win32/SciTEWin.cxx、ExecuteOne 関数を参照してください)。もう少し一般的な方法を検索し、Microsoft 自体からリダイレクトされた標準ハンドルを使用してコンソール プロセスを生成する方法を見つけました。 .
たとえば、 CreatePipe PeekNamedPipe CreateProcessキーワードを検索すると、他の例が見つかる場合があります。
もう 1 つのオプションは、Boost.Processを使用することです (Boost.Process は (まだ) 公式の Boost C++ ライブラリではありません。個別にダウンロードしてインストールする必要があります)。
例「Child.4 - 非同期 I/O を使用した子からの読み取り」は、子プロセスの出力を C++ ストリームにリダイレクトする (そして後でコンテンツにアクセスする) 方法を示しています。
例「Child.4 - 非同期 I/O を使用した子からの読み取り」は、 Boost.Processを Boost.Asio と一緒に使用して子 I/O非同期にアクセスする方法を示しています。
この方法の利点は、Boost.Process が Windows API と POSIX API をサポートしていることです。
エレガンスが優先されない場合、本当に簡単な解決策は、出力をファイルにリダイレクトしてから、ファイルの内容を読み取ることです。