gpt4 book ai didi

c++ - 通过 msbuild exec 在 C++ 中进行彩色控制台输出

转载 作者:行者123 更新时间:2023-11-30 04:21:15 25 4
gpt4 key购买 nike

问题

我很容易找到一种使用 windows.h 和 std::cout 在 C++ 中设置控制台颜色的方法。此处显示了一种此类方法:

HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE); //get handle of console
CONSOLE_SCREEN_BUFFER_INFO bufferInfo;
GetConsoleScreenBufferInfo(stdout, &bufferInfo); //save current color scheme
SetConsoleTextAttribute(stdout, 0x4); //change console color
std::cout << "This is red text" << std::endl;
SetConsoleTextAttribute(stdout, bufferInfo.wAttributes); //restore old colors

果然,当我从控制台窗口运行我的程序时,颜色按预期改变了。问题是,当这是从 msbuild 脚本运行时,我使用 exec:

<Exec Command="myExecutable.exe" />

从 msbuild 脚本运行时,颜色不受程序影响。文本仍会在对 std::cout 的调用中输出,但它只是正常的控制台窗口颜色。


假设

我的猜测是对 exec 的调用通过与 STD_OUTPUT_HANDLE 不同的句柄写入 stdout。要么,要么 msbuild exec 设置自己的控制台属性。我试过获取父控制台,但没有成功。

有什么想法吗?

最佳答案

最有可能的是 MSBuild 将您的可执行文件连接到管道。当您向管道写入内容时,MSBuild 从另一端读取它,然后它可能会进行一些处理:例如写入屏幕、日志等……问题是您无法通过管道传输颜色。事实上,您可以使用 GetFileType 检查您的 stdout 句柄是否不是控制台缓冲区,它将为控制台返回 FILE_TYPE_CHAR 而不是 FILE_TYPE_PIPE 如果我的假设是正确的。您还应该检查您的控制台函数调用是否成功。

关于c++ - 通过 msbuild exec 在 C++ 中进行彩色控制台输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14632650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com