有没有办法在非客户区域中更改Windows Aero颜色?

Use*_*637 3 windows user-interface winapi aero

我注意到Windows已经使Windows的非客户端区域自动成为主题的颜色--Windows Aero.我认为这是一个好主意,因为它使主题在程序和一个通常更好的界面上保持一致.作为一个狡猾的个人,我渴望在这里颠覆微软的意图,并获得一个使用我的程序设置颜色的GUI,而不是操作系统的设置.

思考?

Dav*_*vid 6

是的,这是可能的,但您需要使用未记录的功能.这意味着您的程序可能无法在未来的Windows版本上运行,或者即使发布了Service Pack或其他更新.

如果你愿意承担风险,这篇博文有完整的细节,并反向设计功能以及如何使用它们.它包括您可以实现的屏幕截图: Delphi DWM Aero玻璃颜色变化的屏幕截图

基本上,您需要两个功能:DwmGetColorizationParametersDwmSetColorizationParameters.你传递给他们的结构和方法原型是(在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;
Run Code Online (Sandbox Code Playgroud)

如果您不习惯该语法,则顶部定义结构,底部两行是方法原型.^表示指针,因此Set方法采用指向结构的指针. out很棘手,意味着该方法也是一个指向结构的指针.procedure意味着它返回void.如果您仍然无法阅读它,请发表评论,我将翻译为C.

您应该能够从中找出所需的一切,但如果您想了解更多详细信息或使用它的示例,请阅读博客文章.(这是一个很棒的帖子,应该得到流量.)