【发布时间】:2011-04-03 10:02:27
【问题描述】:
你如何使用DwmGetColorizationColor?
documentation 表示它返回两个值:
- 32 位
0xAARRGGBB包含用于玻璃成分的颜色 - 一个布尔参数,“如果颜色是不透明的混合”,则为真(不管是什么意思)
这是我喜欢的颜色,漂亮的呕吐绿色:
你可以注意到颜色是绿色的,半透明的标题栏(在白色背景下)非常清楚地显示鼻涕颜色:
我尝试从 Windows 获取颜色:
DwmGetColorizationColor(dwCcolorization, bIsOpaqueBlend);
我得到了
dwColorization: 0x0D0A0F04
bIsOpaqueBlend: false
根据文档,该值的格式为AARRGGBB,因此包含:
AA: 0x0D (13)
RR: 0x0A (10)
GG: 0x0F (15)
BB: 0x04 (4)
这应该意味着颜色是 (10, 15, 4),不透明度约为 5.1%。
但如果你真的看一下这个 RGB 值,它与我想要的鼻涕绿色相去甚远。这里是
- (10, 15, 4) 不透明度为零(原始颜色),并且
- (10,15,4) 不透明度为 5%,白色/棋盘背景:
DwmGetColorizationColor 不是Lime 绿色,而是返回几乎完全透明的黑色。
所以问题是:如何在 Windows Vista/7 中获得玻璃颜色?
我尝试使用DwmGetColorizationColor,但效果不佳。
一个person with same problem, but a nicer shiny picture来吸引你的松鼠:
所以,归结为—— DwmGetColorizationColor 完全是 无法用于尝试的应用程序 将当前颜色应用到 不透明的表面。
我爱this guy's screenshots 比我的好得多。以他的截图为模板,我又制作了一些火花:
对于最后两个屏幕截图,alpha 混合芯片是真正的部分透明 PNG,与浏览器的背景混合。凉爽的! (我真是个极客)
编辑 2:必须将它们排列成彩虹色。 (我真是个极客)
编辑 3:现在我当然要添加黄色。
未记录/不受支持/脆弱的解决方法
在入口点 137 处存在来自 DwmApi.dll 的未记录导出,我们将其称为 DwmGetColorizationParameters:
HRESULT GetColorizationParameters_Undocumented(out DWMCOLORIZATIONPARAMS params);
struct DWMCOLORIZATIONPARAMS
{
public UInt32 ColorizationColor;
public UInt32 ColorizationAfterglow;
public UInt32 ColorizationColorBalance;
public UInt32 ColorizationAfterglowBalance;
public UInt32 ColorizationBlurBalance;
public UInt32 ColorizationGlassReflectionIntensity;
public UInt32 ColorizationOpaqueBlend;
}
我们对第一个参数感兴趣:ColorizationColor。
我们也可以从注册表中读取值:
HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM
ColorizationColor: REG_DWORD = 0x6614A600
因此,您选择了创建 appcompat 问题的毒药。你可以
- 依赖未记录的 API(bad、bad、bad、and can go away at any time)
- 使用未记录的注册表项(也是bad 和can go away at any time)
另见
- Is there a list of valid parameter combinations for GetThemeColor / Visual Styles API
- How does Windows change Aero Glass color?
- DWM - Colorization Color Handling Using DWMGetColorizationColor
- Retrieving Aero Glass base color for opaque surface rendering
我已经想问这个问题一年多了。我一直都知道这是不可能回答的,而让任何人真正关注的唯一方法就是拥有彩色截图;开发人员被闪亮的东西所吸引。但不利的一面是,这意味着我必须投入各种工作来制作诱饵。
【问题讨论】:
-
太闪亮了! /me 将闪亮的物体隐藏在闪亮的东西中。 ...这是一个很好的问题。我希望我知道答案。
-
关于 Windows API 的一切总是让我兴奋,不管是不是截图(当然,像这样一个写得很好的问题总是更好)。
-
+1 我也喜欢呕吐绿色,因为我碰巧喜欢各种绿色。
-
This question's answer 似乎是唯一能提供正确混合标题栏颜色的正确方法(至少对于 Windows 8/8.1)。
标签: winapi aero user-preferences dwm