如何获取当前的控制台背景和文本颜色?

时间:2011-12-20 16:47:34

标签: c++ windows colors console

我知道如何设置它们(SetConsoleTextAttribute)但是没有GetConsoleTextAttribute来检索这些信息。在未受影响的控制台上,它应该是int 7。

问题是当从设置文本颜色的程序退出时,它在给定窗口运行的时间内保持不变,并且我不能假设用户没有将颜色设置为他的自定义喜欢。

3 个答案:

答案 0 :(得分:7)

感谢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 +主色)。返回值通知操作是否成功。

答案 1 :(得分:6)

wincon.h的快速grep显示CONSOLE_SCREEN_BUFFER_INFO有一个wAttributes成员documented as“WriteFile和WriteConsole写入屏幕缓冲区的字符的属性函数,或由ReadFile和ReadConsole函数回显到屏幕缓冲区。“这匹配the description of SetConsoleTextAttribute:“设置由WriteFile或WriteConsole函数写入控制台屏幕缓冲区的字符的属性,或由ReadFile或ReadConsole函数回显的字符的属性。”结构由GetConsoleScreenBufferInfo返回。

答案 2 :(得分:4)

以下是代码段。

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);
希望这有帮助。