タイトルの通り、他のプロセスのコンソール出力をもらってファイルに吐き出したいの
ですが、このほかのプロセスというのがコンソールアプリではなく、Windows アプリで
AllocConsole や WriteConsole を使って出力しているのです。
コンソールアプリが相手なら、CreateProcess でそのアプリを起動するときに
STARTUPINFO 構造体の hStdOutput にファイルハンドルを指定してやることで成功した
のですが、AllocConsole の場合はうまくいきません(ファイルに何も出力されませ
ん)。
このようなコンソールの出力をリダイレクトすることは可能なのでしょうか?
贅沢を言うと、コンソール出力をファイルにそのまま吐き出すだけではなく、文字列と
して取得して整形してから出力したいのですが、可能でしょうか?
自己レス。
子プロセスのほうでエラーチェックをしていませんでしたが、エラーチェックをしてみ
たところ、WriteConsole がエラーを起こしてました。ハンドルが無効だそうです。
WriteConsole に渡すのはコンソールスクリーンバッファのハンドルで無ければならない
らしいので、親プロセスで CreateFile ではなく CreateConsoleScreenBuffer で取得し
たハンドルを渡してみましたが、やはり失敗でした。
まぁ、仮に成功しても、これではリダイレクトできないと思いますが。
> AllocConsole や WriteConsole を使って出力しているのです。
リダイレクトはstout/stdin に対してかけるものですからねえ。
Winアプリでprintfの出力を、AllocConsoleで生成したコンソールに
出力できれば、本当に便利なんですが。
不可能ってコトですか。
わかりました。ありがとうございました。
その後、KERNEL32.DLL のラッパー DLL を作って WriteConsole をフックして…なんて
ことも試しましたが挫折。
現在は別のアプローチで取り組んでます。
すいません。
解決忘れてました。