実行中のプロセスからの出力(stdout)をパイプする Win32Api 質問する

実行中のプロセスからの出力(stdout)をパイプする Win32Api 質問する

Windows API を使用して、すでに実行中のプロセスから出力を取得 (またはパイプ) する必要があります。

基本的に、私のアプリケーションでは、ユーザーが入力をパイプするウィンドウを選択できるようにし、すべての入力がコンソールに表示されるようにする必要があります。また、後で stderr にパイプを取得する方法についても検討する予定です。

重要: CreateProcess() などを使用してプロセスを開始していません。プロセスはすでに実行されており、私が持っているのはプロセスへのハンドル (GetWindowThreadProcessId() から返される) だけです。

ベストアンサー1

Adam が示唆した、既存の stdout ハンドルを独自のものと交換する方法を使用した場合に発生する可能性のある悪影響を起こさずにこれを行う最もクリーンな方法は、フックを使用することです。

既存のアプリケーションにスレッドを挿入し、WriteFile への呼び出しを、最初に書き込まれる内容のコピー (ハンドル、ソースなどでフィルタリング) を提供するインターセプトされたバージョンと交換すると、実際の ::WriteFile に何も害を与えることなく渡されます。または、printf またはソフトウェアが使用しているその他の呼び出しを交換するだけで、より上位の呼び出しをインターセプトすることもできます (もちろん、ある程度の実験が必要です)。

しかし、アダムが「これはあなたがやりたいことではない」と言ったのは正しいです。これは最後の手段なので、この方法を取る前に非常に慎重に考えてください。

おすすめ記事