Как получить текущие цвета фона и текста консоли?
Я знаю, как их установить (SetConsoleTextAttribute), но для получения этой информации нет GetConsoleTextAttribute. На незатронутой консоли это должно быть int 7.
Проблема заключается в том, что при выходе из программы, которая устанавливает цвет текста, она остается неизменной для времени, за которое запускается данное окно, и я не могу предположить, что пользователь не задал цвета по своему вкусу.
Ответы
Ответ 1
Быстрый вывод wincon.h
показывает, что CONSOLE_SCREEN_BUFFER_INFO
имеет член wAttributes
, который задокументирован как "Атрибуты символов, записанных в экранный буфер функциями WriteFile и WriteConsole, или отражены в экранный буфер функциями ReadFile и ReadConsole. " Это соответствует описанию SetConsoleTextAttribute
: "Устанавливает атрибуты символов, записываемых в буфер экрана консоли с помощью функции WriteFile или WriteConsole или отражаемых функцией ReadFile или ReadConsole". Структура возвращается GetConsoleScreenBufferInfo
.
Ответ 2
Благодаря Talent25 я сделал эту функцию:
#include <Windows.h>
bool GetColor(short &ret){
CONSOLE_SCREEN_BUFFER_INFO info;
if (!GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info))
return false;
ret = info.wAttributes;
return true;
}
используя его:
GetColor(CurrentColor);
CurrentColor - переменная для выходного числа цвета (фон * 16 + основной цвет). Возвращаемое значение сообщает, что действие выполнено успешно.
Ответ 3
Вот фрагмент кода.
HANDLE m_hConsole;
WORD m_currentConsoleAttr;
CONSOLE_SCREEN_BUFFER_INFO csbi;
//retrieve and save the current attributes
m_hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
if(GetConsoleScreenBufferInfo(m_hConsole, &csbi))
m_currentConsoleAttr = csbi.wAttributes;
//change the attribute to what you like
SetConsoleTextAttribute (
m_hConsole,
FOREGROUND_RED |
FOREGROUND_GREEN);
//set the ttribute to the original one
SetConsoleTextAttribute (
m_hConsole,
m_currentConsoleAttr);