更改子进程的控制台颜色

时间:2012-06-18 14:46:37

标签: windows winapi console-application

我正在创建一个调用控制台应用程序的新进程。我想更改这个子进程的控制台窗口的颜色。

原因是我无法重定向控制台的标准输出,因为应用程序操纵控制台光标。相反,我正在剥离控制台框架,剪切我想要的信息并将控制台嵌入我的应用程序批发中。我只是想改变颜色,以便更好地适应。

我知道SetConsoleTextAttribute函数,但我不知道如何使用子进程的stdout句柄来使用它。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

DuplicateHandle的文档说:

  

可以复制控制台句柄以仅在同一进程中使用

(它们不是真正的句柄)所以即使你可以向孩子注入代码,你也无法走这条路。

我假设父应用程序还没有控制台(每个进程只能有一个没有做可怕的黑客攻击),如果是这种情况你应该可以使用AllocConsole(),{{1 }},GetStdHandle()SetConsoleTextAttribute(),最后是CreateProcess()(如果您当时只运行一个子进程,则不需要FreeConsole)

另一个选项是使用cmd.exe:FreeConsole()(使用在cmd中运行cmd.exe /T:?? /C childapplication.exe找到的颜色值替换??)