从控制台C ++应用程序将stdout输出着色到Windows cmd.exe

我想写一些类似的东西

cout << "this text is not colorized\n"; setForeground(Color::Red); cout << "this text shows as red\n"; setForeground(Color::Blue); cout << "this text shows as blue\n"; 

对于在Windows 7下运行的C ++控制台程序。我已经读过,可以从cmd.exe的设置或通过调用system()来更改全局前景和背景 – 但是有什么方法可以在可以编码的字符级别上进行更改成一个程序? 起初我以为“ANSI序列”,但他们似乎已经在Windows领域中失去了很长一段时间。

Solutions Collecting From Web of "从控制台C ++应用程序将stdout输出着色到Windows cmd.exe"

你可以使用SetConsoleTextAttribute函数:

 BOOL WINAPI SetConsoleTextAttribute( __in HANDLE hConsoleOutput, __in WORD wAttributes ); 

这里有一个简单的例子,你可以看看。

 #include "stdafx.h" #include <iostream> #include <windows.h> #include <winnt.h> #include <stdio.h> using namespace std; int main(int argc, char* argv[]) { HANDLE consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); cout << "this text is not colorized\n"; SetConsoleTextAttribute(consolehwnd, FOREGROUND_RED); cout << "this text shows as red\n"; SetConsoleTextAttribute(consolehwnd, FOREGROUND_BLUE); cout << "this text shows as blue\n"; } 

该函数影响函数调用后写入的文本。 所以最后你可能想恢复到原来的颜色/属性。 您可以使用GetConsoleScreenBufferInfo在最开始处记录初始颜色,并在最后执行带有SetConsoleTextAttribute的重置。