2011-12-20 15 views
6

Sé cómo configurarlos (SetConsoleTextAttribute) pero no hay GetConsoleTextAttribute para recuperar esta información. En una consola no afectada, debe ser int 7.cómo obtener el fondo actual de la consola y los colores del texto?

El problema es que al salir de un programa que establece el color del texto, permanece igual durante la ejecución de la ventana, y no puedo suponer que el usuario no haya configurado el colores a su gusto personalizado.

Respuesta

4

A grep rápida de wincon.h muestra que CONSOLE_SCREEN_BUFFER_INFO tiene un miembro de wAttributes que es documented as "Los atributos de los caracteres escritos a una memoria tampón de pantalla por las funciones WriteFile y WriteConsole, o eco a una memoria intermedia por las funciones ReadFile y ReadConsole pantalla. " Esto coincide con the description of SetConsoleTextAttribute: "Establece los atributos de los caracteres escritos en el búfer de la pantalla de la consola por la función WriteFile o WriteConsole, o repetidos por la función ReadFile o ReadConsole." La estructura es devuelta por GetConsoleScreenBufferInfo.

2

Aquí está el fragmento de código.

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

esperanza esto es de ayuda.

6

Gracias a Talent25 Hice esta función:

#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; 
} 

usarlo:

GetColor(CurrentColor); 

currentcolor - variable para el número de salida del color (fondo * 16 + color principal). El valor devuelto informa si la acción fue exitosa.

Cuestiones relacionadas