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

Posted

技术标签:

【中文标题】如何获取当前控制台背景和文本颜色?【英文标题】:how to get current console background and text colors? 【发布时间】:2012-01-24 14:54:04 【问题描述】:

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

问题是当退出一个设置文本颜色的程序时,它在给定窗口运行的时间内保持不变,我不能假设用户没有根据自己的喜好设置颜色。

【问题讨论】:

【参考方案1】:

wincon.h 的快速 grep 显示 CONSOLE_SCREEN_BUFFER_INFO 有一个 wAttributes 成员 documented as "由 WriteFile 和 WriteConsole 函数写入屏幕缓冲区或回显到屏幕缓冲区的字符的属性通过 ReadFile 和 ReadConsole 函数。”这与 the description of 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】:

这里是代码 sn-p。

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

【讨论】:

以上是关于如何获取当前控制台背景和文本颜色?的主要内容,如果未能解决你的问题,请参考以下文章

react-native 如何在子组件中获取父组件背景颜色

如何从 SecondView 中获取选定的背景颜色以传递给 FirstView?

如何使用 Selenium WebDriver 和 python 获取 Web 元素的颜色?

获取并使用背景颜色在其他窗口中应用相同的颜色

如何在 iOS 7 上更改状态栏背景颜色和文本颜色?

如何从脚本的纯色图像中获取十六进制颜色代码?