2011-12-20 1 views
6

Я знаю, как их установить (SetConsoleTextAttribute), но для получения этой информации нет GetConsoleTextAttribute. На незатронутой консоли это должно быть int 7.Как получить текущий цвет фона и текст в консоли?

Проблема заключается в том, что при выходе из программы, которая устанавливает цвет текста, она остается неизменной за время, за которое запускается данное окно, и я не могу предположить, что пользователь не установил цветов по своему вкусу.

ответ

4

Быстрый Grep из wincon.h показывает, что CONSOLE_SCREEN_BUFFER_INFO имеет wAttributes элемент, который documented as «Атрибуты символов, записанных в буфер экрана с помощью функции WriteFile и WriteConsole или отражаемых в буфер экрана с помощью функции ReadFile и ReadConsole. " Это соответствует the description of SetConsoleTextAttribute: «Устанавливает атрибуты символов, записанных в буфер экрана консоли, с помощью функции WriteFile или WriteConsole или повторяется функцией ReadFile или ReadConsole». Конструкция возвращается GetConsoleScreenBufferInfo.

2

Код фрагмента кода.

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

надеюсь, что это поможет.

6

Благодаря 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 + основного цвета). Возвращаемое значение сообщает, что действие было успешным.

Смежные вопросы