是否有办法更改非客户区的Windows Aero颜色?
我注意到Windows已经使Windows的非客户端区域自动成为主题的颜色-Windows Aero。我认为这是一个很好的想法,因为它使主题在各个程序中保持一致,并且有一个更好的界面。作为一个狡猾的人,我渴望颠覆微软在这里的意图,让一个GUI使用我的程序设置的颜色,而不是操作系统的设置是否有办法更改非客户区的Windows Aero颜色?,windows,winapi,user-interface,aero,Windows,Winapi,User Interface,Aero,我注意到Windows已经使Windows的非客户端区域自动成为主题的颜色-Windows Aero。我认为这是一个很好的想法,因为它使主题在各个程序中保持一致,并且有一个更好的界面。作为一个狡猾的人,我渴望颠覆微软在这里的意图,让一个GUI使用我的程序设置的颜色,而不是操作系统的设置 想法?是的,这是可能的,但您需要使用未记录的函数。这意味着您的程序可能无法在未来版本的Windows上运行,或者即使发布了service Pack或其他更新 如果您愿意承担风险,并对功能和使用方法进行反向工程。它
想法?是的,这是可能的,但您需要使用未记录的函数。这意味着您的程序可能无法在未来版本的Windows上运行,或者即使发布了service Pack或其他更新 如果您愿意承担风险,并对功能和使用方法进行反向工程。它包括您可以实现的屏幕截图: 基本上,您需要两个函数:
DwmGetColorizationParameters
和DwmSetColorizationParameters
。传递给它们的结构和方法原型是(在Delphi中,但我确信如果你使用的是这个,你可以翻译成C++):
如果您不习惯这种语法,那么顶部部分定义一个结构,底部两行是方法原型。^表示指针,因此Set方法使用指向结构的指针。这意味着该方法也在使用指向该结构的指针<代码>过程表示返回void。如果你读起来仍然有困难,请留下评论,我会翻译成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;