Как можно изменить цвет текста вывода на консоль на красный, но фон останется тем же цветом, если он запускается из Powershell или CMD - PullRequest
1 голос
/ 19 июня 2019

В Windows я хочу, чтобы моя программа выводила текст на консоль красным цветом только для одной строки программы. Но я хочу, чтобы фон оставался неизменным независимо от того, была ли запущена программа из Powershell или cmd.

Я пытался использовать РУЧКУ

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, color);
cout << text;

Это изменит фон. Если я сопоставлю черный фон cmd по умолчанию (если цвет 0-15), он отобразит текст с черным фоном в Powershell поверх темно-синего фона Powershell по умолчанию.

Мне бы хотелось, чтобы, если кто-то запускает программу из CMD или Powershell, цвет фона не меняется, а текст меняется.

1 Ответ

0 голосов
/ 19 июня 2019

Благодаря иммибису я получил свой ответ.Мне нужно было получить текущий цвет консоли, чтобы я мог перейти оттуда.

CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
int defaultColor = 7;
int redColor = 12;
if (GetConsoleScreenBufferInfo(hConsole, &csbiInfo)) //This gets the color
{
   defaultColor = csbiInfo.wAttributes;  //This is where the current color is stored
   redColor = (defaultColor / 16) * 16 + 12;  //Keeps the background color, sets the text to red
}
SetConsoleTextAttribute(hConsole, redColor);
cout << "This is red!\n";
SetConsoleTextAttribute(hConsole, defaultColor);
cout << "Back to Normal!";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...