我注意到 Windows 已自动将 Windows 的非客户区作为主题的颜色 - Windows Aero。我认为这是一个好主意,因为它使主题在程序之间保持一致,并且界面通常更好。作为一个狡猾的人,我渴望在这里颠覆微软的意图,并获得一个使用我的程序设置的颜色的 GUI,而不是操作系统的设置。
想法?
我注意到 Windows 已自动将 Windows 的非客户区作为主题的颜色 - Windows Aero。我认为这是一个好主意,因为它使主题在程序之间保持一致,并且界面通常更好。作为一个狡猾的人,我渴望在这里颠覆微软的意图,并获得一个使用我的程序设置的颜色的 GUI,而不是操作系统的设置。
想法?
是的,这是可能的,但您需要使用未记录的函数。这意味着您的程序可能无法在未来版本的 Windows 上运行,或者即使发布了服务包或其他更新。
如果您愿意冒险,这篇博文将提供完整的详细信息,并对功能以及如何使用它们进行逆向工程。它包括您可以实现的屏幕截图:
基本上,您需要两个功能:DwmGetColorizationParameters
和DwmSetColorizationParameters
. 您传递给它们的结构和方法原型是(在 Delphi 中,但如果您正在使用,我相信您可以转换为 C++):
tagCOLORIZATIONPARAMS = record
clrColor : COLORREF; //ColorizationColor
clrAftGlow : COLORREF; //ColorizationAfterglow
nIntensity : UINT; //ColorizationColorBalance -> 0-100
clrAftGlowBal : UINT; //ColorizationAfterglowBalance
clrBlurBal : UINT; //ColorizationBlurBalance
clrGlassReflInt : UINT; //ColorizationGlassReflectionIntensity
fOpaque : BOOL;
end;
COLORIZATIONPARAMS=tagCOLORIZATIONPARAMS;
TColorizationParams=COLORIZATIONPARAMS;
PColorizationParams=^TColorizationParams;
TDwmGetColorizationParameters = procedure(out parameters :TColorizationParams); stdcall;
TDwmSetColorizationParameters = procedure(parameters :PColorizationParams; unknown:BOOL); stdcall;
如果您不习惯该语法,则顶部定义一个结构,底部两行是方法原型。^ 表示指针,因此 Set 方法采用指向结构的指针。 out
很棘手,意味着该方法也采用了指向结构的指针。procedure
意味着它返回无效。如果您仍然无法阅读它,请发表评论,我将翻译成 C。
您应该能够从中找出您需要的一切,但是如果您想要更多详细信息或使用它的示例,请阅读博客文章。(这是一个很好的帖子,值得流量。)