我正在尝试在 Windows 10 的 UI 中获取一些颜色设置,例如窗口激活/非激活时窗口标题栏的颜色,窗口的边缘颜色。或者更简单地说,我正在 Windows 10 中的 winuser.h(Documentation) 中寻找类似 getSysColor() 的函数。
这是我尝试过的:
getSysColor(nIndex)
:
此功能在 Windows 10 下无法正常工作,因为根据 (
Documentation) 不支持某些按键 (
nIndex
)。例如,如果我在Python中用ctypes.windll.user32.GetSysColor(2)
询问激活窗口标题栏的颜色,它将返回##99B4D1的颜色,这可能是Windows 7下的颜色,而不是Windows 10中的##0078D7。但是我不想要 Windows 7 的颜色集。
DwmGetColorizationColor()
:
有人建议这个函数可以检索标题栏的颜色。但我只能得到一个奇怪的黄色(##F8FFA9)和
ctypes.windll.dwmapi.DwmGetColorizationColor()
,这绝对不是我想要的。同时该函数只能提供标题栏的颜色,而不是Windows UI中使用的所有颜色。
您需要使用 UIColorType::Accent
调用
UISettings::GetColorValue。
遗憾的是,官方 Python/WinRT 绑定不支持任何比 Python 3.9 更新的内容,因为它们已被放弃(虽然您可以直接使用
RoGetActivationFactory
和朋友,但这并不方便),但社区分支工作得很好。
您需要 winrt-Windows.UI 和 winrt-Windows.UI.ViewManagement:
from winrt.windows.ui.viewmanagement import UISettings, UIColorType
accent_color = UISettings().get_color_value(UIColorType.ACCENT)
print("accent color:", accent_color.r, accent_color.g, accent_color.b, accent_color.a)