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