【问题标题】:Change console color of child process更改子进程的控制台颜色
【发布时间】:2012-06-18 14:46:37
【问题描述】:

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

原因是我无法重定向控制台的标准输出,因为应用程序操纵了控制台光标。相反,我剥离了控制台框架,剪切了我想要的信息并将控制台嵌入到我的应用程序中。我只是想更改颜色以使其更适合。

我知道SetConsoleTextAttribute 函数,但我不知道如何获取子进程的标准输出句柄以使用它。

有人有什么想法吗?

【问题讨论】:

    标签: windows winapi console-application


    【解决方案1】:

    DuplicateHandle 的文档说:

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

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

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

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

    【讨论】:

    • 是的,父应用程序没有控制台,我需要继承句柄才能工作吗?我考虑过 cmd /T 方法,但我的第一选择是只使用 win32 api。
    • 不,只要您不向 CreateProcess 传递奇怪的标志,子进程就应该在同一个控制台中启动...
    • 太好了,今天早上我会试一试,如果可行,请将其标记为答案。谢谢!
    • 太棒了,非常感谢!设置颜色后需要清除控制台。
    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 2013-06-27
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2022-01-16
    • 2019-08-29
    相关资源
    最近更新 更多