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

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

我尝试调用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:那就让它成为答案并接受吧!

标签: c++ windows delphi winapi visual-c++


【解决方案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
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 2014-08-24
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2015-05-03
    • 1970-01-01
    相关资源
    最近更新 更多