通过 msbuild exec 以C++格式的调色台输出
Color console output in C++ via msbuild exec
>问题
我很容易找到一种使用 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
我的假设是否正确。还应检查控制台函数调用是否成功。
相关文章:
- 保证最大输出长度为双精度,并设置默认输出格式的精度
- 输出使用 cout 转换为 ASCII 的文本时输出格式不正确,C++
- 如何将 Openh264 解码帧无延迟输出格式转换为 OpenCV 矩阵
- 为什么int8_t的输出格式使用 4 个字节?
- 使用setW和setFill的输出格式
- TensorFlow图像识别输出格式C
- 背诵和提示输出对齐C++,输出格式
- 哪些数据文件从python(或其他)中读取的C 输出格式更有效
- 读取C 和输出格式的文本文件
- 窗口上的输出格式
- 整数输出格式.什么是 printf(%.3x) 的类似物
- C++输出格式错误
- c++输出格式问题
- 以C++格式输出格式
- 设置输出格式以类似于C++中的表
- 使用iomanip将数据输出格式化为具有Qt的文本文件
- 输出格式错误
- cin/ofstream的输出格式不同
- boost日期时间--输出格式
- __int64将输出格式化为十六进制