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

Posted

技术标签:

【中文标题】如何在 Windows 8 中获取活动窗口的标题颜色【英文标题】:How to get the caption color of an active window in Windows 8 【发布时间】:2012-09-21 09:53:18 【问题描述】:

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

【问题讨论】:

您需要为此调用主题 API 当 DWM/Aero 被禁用时它会返回正确的值。启用后,这些在很大程度上会被忽略,您需要查询主题 API 以获取图像/颜色渐变。 问题是我也无法从 Theme API 获得正确的颜色。我尝试了 GetThemeSysColor(0, COLOR_ACTIVECAPTION) 以及带有 WINDOW/WP_CAPTION/CS_ACTIVE 的 GetThemeColor。 GetThemeSysColor 返回错误的颜色,GetThemeColor 返回错误。您没有任何示例如何从 Theme API 获取活动标题颜色吗? 我找到了解决方案! - 函数 DwmGetColorizationColor @user1614498:那就让它成为答案并接受吧! 【参考方案1】:
DWORD WINAPI GetSysColor(
 _In_  int nIndex
 );

对于GetSysColor()函数,如果nIndex参数超出范围,则返回值为零。因为零也是一个有效的 RGB 值,所以您不能使用GetSysColor() 来确定当前平台是否支持系统颜色。相反,请使用 GetSysColorBrush() 函数,如果颜色不受支持,该函数将返回 NULL

Click to see the syntax and usage.

另一个选项是使用DwmGetColorizationColor() 函数,它可以检索用于Desktop Window Manager (DWM) 玻璃成分的当前颜色。该值基于当前的配色方案,可由用户修改。应用程序可以通过处理WM_DWMCOLORIZATIONCOLORCHANGED 通知来监听颜色变化。

HRESULT WINAPI DwmGetColorizationColor(
  _Out_  DWORD *pcrColorization,
  _Out_  BOOL *pfOpaqueBlend
);

【讨论】:

以上是关于如何在 Windows 8 中获取活动窗口的标题颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaFX 中获取 Stage 的窗口句柄 (hWnd)?

如何在c ++ winapi中获取活动文件资源管理器窗口的路径

c#获取活动窗口文本(导致vshost32.exe停止工作)

如何获取任务管理器中显示的活动窗口应用程序名称

如何在不从当前活动选项卡中获取焦点的情况下将子窗口添加到 QMdiArea(设置为 TAB 模式)?

如何强制 Windows 忽略 AutoHotKey 并将该热键直接传递给活动窗口?