Раскрасить вывод стандартного вывода в Windows cmd.exe из консольного приложения C ++ - PullRequest
5 голосов
/ 15 октября 2011

Я хотел бы написать что-то похожее на

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";

для консольной программы C ++, работающей под Windows 7. Я прочитал, что глобальный передний план и фон можно изменить из настроек cmd.exe или с помощью вызова system (), но есть ли способ изменить что-то на уровне символов, можно закодировать в программу? Сначала я подумал «последовательности ANSI», но, похоже, они давно утрачены на арене Windows.

Ответы [ 2 ]

9 голосов
/ 15 октября 2011

Вы можете использовать SetConsoleTextAttribute function:

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 , чтобы записать исходный цвет в самом начале и выполнить сброс w / SetConsoleTextAttribute в конце.

1 голос
/ 15 октября 2011
...