0

コンソール アプリケーションを呼び出す新しいプロセスを作成しています。この子プロセスのコンソール ウィンドウの色を変更したいと考えています。

その理由は、アプリケーションがコンソール カーソルを操作するため、コンソールの stdout をリダイレクトできないためです。代わりに、コンソール フレームを取り除き、必要な情報を切り取って、コンソールをアプリケーション全体に埋め込みます。似合うように色を変えたいです。

関数は知ってSetConsoleTextAttributeいますが、子プロセスの stdout ハンドルにアクセスして使用する方法がわかりません。

誰にもアイデアはありますか?

4

1 に答える 1

2

DuplicateHandle のドキュメントには次のように書かれています。

コンソールハンドルは、同じプロセスでのみ使用するために複製できます

(それらは実際のハンドルではありません) したがって、子にコードを挿入できたとしても、このルートをたどることはできません。

親アプリケーションにはまだコンソールがないと仮定しています (恐ろしいハックを行わずにプロセスごとに 1 つしか持つことができませAllocConsole()GetStdHandle()) 。一度に 1 つの子プロセスのみを実行する場合)SetConsoleTextAttribute()CreateProcess()FreeConsole()

もう 1 つのオプションは、cmd.exe を使用することです: (?? をcmdcmd.exe /T:?? /C childapplication.exeで実行して見つけた色の値に置き換えます)color /?

于 2012-06-18T15:37:41.867 に答える