C++ 以C++;通过msbuild exec

C++ 以C++;通过msbuild exec,c++,msbuild,console-application,windows-console,C++,Msbuild,Console Application,Windows Console,问题 我很容易找到一种使用Windows .h和STD::CUT在C++中设置控制台颜色的方法。其中一种方法如下所示: HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE); //get handle of console CONSOLE_SCREEN_BUFFER_INFO bufferInfo; GetConsoleScreenBufferInfo(stdout, &bufferInfo); //save current color sche

问题

我很容易找到一种使用Windows .h和STD::CUT在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
HANDLE stdout=GetStdHandle(STD\u OUTPUT\u HANDLE)//拿到控制台的手柄
控制台屏幕缓冲区信息缓冲区信息;
GetConsoleScreenBufferInfo(标准输出和缓冲信息)//保存当前颜色方案
SetConsoleTextAttribute(标准输出,0x4)//更改控制台颜色

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

相关?答对 了在标准输出句柄上调用GetFileType返回文件类型管道。那么,很清楚,在管道中没有办法设置颜色吗?@Kirby:没有。在这方面它就像一个文件:只是一个二进制数据流。
<Exec Command="myExecutable.exe" />