他プロセスのコンソール出力をリダイレクト – プログラミング – Home

他プロセスのコンソール出力をリダイレク...
 
通知
すべてクリア

[解決済] 他プロセスのコンソール出力をリダイレクト


aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
Topic starter  

タイトルの通り、他のプロセスのコンソール出力をもらってファイルに吐き出したいの
ですが、このほかのプロセスというのがコンソールアプリではなく、Windows アプリで
AllocConsole や WriteConsole を使って出力しているのです。

コンソールアプリが相手なら、CreateProcess でそのアプリを起動するときに
STARTUPINFO 構造体の hStdOutput にファイルハンドルを指定してやることで成功した
のですが、AllocConsole の場合はうまくいきません(ファイルに何も出力されませ
ん)。

このようなコンソールの出力をリダイレクトすることは可能なのでしょうか?


引用
トピックタグ
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
Topic starter  

贅沢を言うと、コンソール出力をファイルにそのまま吐き出すだけではなく、文字列と
して取得して整形してから出力したいのですが、可能でしょうか?


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
Topic starter  

自己レス。

子プロセスのほうでエラーチェックをしていませんでしたが、エラーチェックをしてみ
たところ、WriteConsole がエラーを起こしてました。ハンドルが無効だそうです。
WriteConsole に渡すのはコンソールスクリーンバッファのハンドルで無ければならない
らしいので、親プロセスで CreateFile ではなく CreateConsoleScreenBuffer で取得し
たハンドルを渡してみましたが、やはり失敗でした。
まぁ、仮に成功しても、これではリダイレクトできないと思いますが。


返信引用
ボコノン教徒
 ボコノン教徒
(@ボコノン教徒)
ゲスト
結合: 22年前
投稿: 90
 

> AllocConsole や WriteConsole を使って出力しているのです。

リダイレクトはstout/stdin に対してかけるものですからねえ。
Winアプリでprintfの出力を、AllocConsoleで生成したコンソールに
出力できれば、本当に便利なんですが。


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
Topic starter  

不可能ってコトですか。
わかりました。ありがとうございました。

その後、KERNEL32.DLL のラッパー DLL を作って WriteConsole をフックして…なんて
ことも試しましたが挫折。
現在は別のアプローチで取り組んでます。


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
Topic starter  

すいません。
解決忘れてました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました