问题
我很容易找到一种使用 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 不同的句柄写入标准输出。要么,要么 msbuild exec 设置自己的控制台属性。我试过让父控制台,但没有任何运气。
有任何想法吗?