如何用Python获取Windows 10系统UI(配色主题)的颜色设置?
获取Windows 10系统UI颜色的替代方案
需求说明
需要获取Windows 10系统UI的各类颜色设置,包括:
- 激活/未激活状态下的窗口标题栏颜色
- 窗口边框颜色
核心是寻找Windows 10中替代winuser.h里GetSysColor()函数的方案——该函数在Win10下部分参数已失效,无法返回当前系统的真实配色。
示意图(标注激活窗口标题栏颜色位置):
已尝试的无效方法
GetSysColor()函数:
该函数在Windows 10下部分nIndex参数不再被支持。例如用Python代码ctypes.windll.user32.GetSysColor(2)获取激活窗口标题栏颜色时,返回的是#99B4D1(Windows 7配色),而非Win10实际使用的#0078D7,不符合需求。DwmGetColorizationColor()函数:
调用ctypes.windll.dwmapi.DwmGetColorizationColor()得到的是异常的#F8FFA9黄色,并非目标标题栏颜色。且该函数仅能获取标题栏颜色,无法覆盖所有Windows UI颜色需求。
可行解决方案
在Windows 10中,正确获取系统UI颜色的方式是使用**UISettings类**(属于Windows.UI.ViewManagement命名空间),它可以获取当前系统主题下的各类UI元素颜色,完全适配Win10及以上版本。以下是Python实现示例:
import winrt.windows.ui.viewmanagement as viewmanagement # 初始化UISettings实例 ui_settings = viewmanagement.UISettings() # 获取激活窗口标题栏颜色并转换为RGB格式 active_title_color = ui_settings.get_color_value(viewmanagement.UIColorType.ACTIVATED_TITLE_BAR) r = active_title_color >> 16 & 0xFF g = active_title_color >> 8 & 0xFF b = active_title_color & 0xFF print(f"激活窗口标题栏颜色: #{r:02X}{g:02X}{b:02X}") # 获取未激活窗口标题栏颜色 inactive_title_color = ui_settings.get_color_value(viewmanagement.UIColorType.INACTIVATED_TITLE_BAR) r = inactive_title_color >> 16 & 0xFF g = inactive_title_color >> 8 & 0xFF b = inactive_title_color & 0xFF print(f"未激活窗口标题栏颜色: #{r:02X}{g:02X}{b:02X}") # 获取窗口边框颜色 border_color = ui_settings.get_color_value(viewmanagement.UIColorType.WINDOW_BORDER) r = border_color >> 16 & 0xFF g = border_color >> 8 & 0xFF b = border_color & 0xFF print(f"窗口边框颜色: #{r:02X}{g:02X}{b:02X}")
补充说明
UISettings会跟随系统主题(浅色/深色/自定义颜色)实时返回正确的UI颜色。- 通过
UIColorType枚举还可获取更多UI元素颜色,比如菜单背景、按钮前景色等,覆盖大部分系统UI颜色需求。
内容的提问来源于stack exchange,提问作者bhj
相关产品推荐
相关产品推荐


