問題
windows.hとstd::coutを使用して、C++でコンソールの色を設定する方法を簡単に理解できました。そのような方法の1つを次に示します。
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に書き込みます。それか、msbuildexecが独自のコンソール属性を設定します。親コンソールを入手しようとしましたが、うまくいきませんでした。
何か案は?