how to get current console background and text colors?

前端 未结 3 1336
半阙折子戏
半阙折子戏 2021-01-01 19:06

I know how to set them (SetConsoleTextAttribute) but there isn\'t a GetConsoleTextAttribute to retrieve this information. On a unaffected console it should be int 7.

相关标签:
3条回答
  • 2021-01-01 19:36

    A quick grep of wincon.h shows that CONSOLE_SCREEN_BUFFER_INFO has a wAttributes member which is documented as "The attributes of the characters written to a screen buffer by the WriteFile and WriteConsole functions, or echoed to a screen buffer by the ReadFile and ReadConsole functions." This matches the description of SetConsoleTextAttribute: "Sets the attributes of characters written to the console screen buffer by the WriteFile or WriteConsole function, or echoed by the ReadFile or ReadConsole function." The structure is returned by GetConsoleScreenBufferInfo.

    0 讨论(0)
  • 2021-01-01 19:52

    Thanks to Talent25 I made this function:

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

    using it:

    GetColor(CurrentColor);
    

    CurrentColor - variable for output number of color (background * 16 + main color). Returned value informs if action was successful.

    0 讨论(0)
  • 2021-01-01 19:52

    Here is code snippet.

    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);
    
    0 讨论(0)
提交回复
热议问题