我正在创建一个调用控制台应用程序的新进程。我想更改这个子进程的控制台窗口的颜色。
原因是我无法重定向控制台的标准输出,因为应用程序操纵控制台光标。相反,我正在剥离控制台框架,剪切我想要的信息并将控制台嵌入我的应用程序批发中。我只是想改变颜色,以便更好地适应。
我知道SetConsoleTextAttribute
函数,但我不知道如何使用子进程的stdout句柄来使用它。
有人有什么想法吗?
答案 0 :(得分:2)
DuplicateHandle的文档说:
可以复制控制台句柄以仅在同一进程中使用
(它们不是真正的句柄)所以即使你可以向孩子注入代码,你也无法走这条路。
我假设父应用程序还没有控制台(每个进程只能有一个没有做可怕的黑客攻击),如果是这种情况你应该可以使用AllocConsole()
,{{1 }},GetStdHandle()
,SetConsoleTextAttribute()
,最后是CreateProcess()
(如果您当时只运行一个子进程,则不需要FreeConsole)
另一个选项是使用cmd.exe:FreeConsole()
(使用在cmd中运行cmd.exe /T:?? /C childapplication.exe
找到的颜色值替换??)