2012-10-16 42 views
3

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

想法?

回答

5

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

如果您愿意冒这个风险,this blog post has full details并且反向设计了这些功能以及如何使用它们。它包括的可以达到什么样的一个截图: Screenshot of Delphi DWM Aero glass color changes

基本上有你需要两个功能: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; 

如果你不习惯这种语法,顶部分定义了一个结构,底部的两行是方法原型。 ^表示一个指针,所以Set方法正在接受一个指向结构体的指针。 out is tricky并且意味着该方法也正在指向该结构。 procedure表示它返回void。如果您仍然在阅读时遇到困难,请留下评论,我会将其翻译为C.

您应该能够弄清楚您需要的所有内容,但是如果您想了解更多详细信息或使用它的示例,请read the blog post 。 (这是一个很好的帖子,值得交通。)

相关问题