如何在Windows 8中获取当前窗口标题栏的颜色

3

我该如何在Windows 8中获取活动窗口的标题栏颜色?

我尝试调用GetSysColor(COLOR_ACTIVECAPTION),但它返回不同的颜色。这很奇怪,因为在Windows 7中它能正常工作。是否有其他方法可以获取活动窗口的标题栏颜色或任务栏的颜色?


2
当 DWM/Aero 被禁用时,它将返回正确的值。当它被启用时,这些值往往会被忽略,您需要查询主题 API 获取图像/颜色渐变。 - Deanna
微软在W8中删除了Aero,所以我认为Aero不是它无法工作的原因。 - user1614498
1
问题在于我无法从主题 API 中获取正确的颜色。我尝试了 GetThemeSysColor(0, COLOR_ACTIVECAPTION) 和 GetThemeColor 与 WINDOW/WP_CAPTION/CS_ACTIVE。GetThemeSysColor 返回错误的颜色,而 GetThemeColor 返回错误。你没有任何关于如何从主题 API 获取活动标题颜色的示例吗? - user1614498
3
我找到了解决方案!- 函数 DwmGetColorizationColor - user1614498
2
@user1614498:那就把它变成答案并接受吧! - Uli Gerhardt
显示剩余2条评论
1个回答

2
DWORD WINAPI GetSysColor(
 _In_  int nIndex
 );

对于GetSysColor()函数,如果nIndex参数超出范围,则返回值为零。因为零也是有效的RGB值,所以您不能使用GetSysColor()来确定当前平台是否支持系统颜色。相反,使用GetSysColorBrush()函数,如果颜色不受支持,则返回NULL点击查看语法和用法。 另一个选择是使用DwmGetColorizationColor()函数,它可以检索用于桌面窗口管理器(DWM)玻璃合成的当前颜色。该值基于当前的颜色方案,并且可以由用户修改。应用程序可以通过处理WM_DWMCOLORIZATIONCOLORCHANGED通知来监听颜色更改。
HRESULT WINAPI DwmGetColorizationColor(
  _Out_  DWORD *pcrColorization,
  _Out_  BOOL *pfOpaqueBlend
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接