Use*_*637 3 windows user-interface winapi aero
我注意到Windows已经使Windows的非客户端区域自动成为主题的颜色--Windows Aero.我认为这是一个好主意,因为它使主题在程序和一个通常更好的界面上保持一致.作为一个狡猾的个人,我渴望在这里颠覆微软的意图,并获得一个使用我的程序设置颜色的GUI,而不是操作系统的设置.
思考?
是的,这是可能的,但您需要使用未记录的功能.这意味着您的程序可能无法在未来的Windows版本上运行,或者即使发布了Service Pack或其他更新.
如果你愿意承担风险,这篇博文有完整的细节,并反向设计功能以及如何使用它们.它包括您可以实现的屏幕截图:

基本上,您需要两个功能: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;
Run Code Online (Sandbox Code Playgroud)
如果您不习惯该语法,则顶部定义结构,底部两行是方法原型.^表示指针,因此Set方法采用指向结构的指针. out很棘手,意味着该方法也是一个指向结构的指针.procedure意味着它返回void.如果您仍然无法阅读它,请发表评论,我将翻译为C.
您应该能够从中找出所需的一切,但如果您想了解更多详细信息或使用它的示例,请阅读博客文章.(这是一个很棒的帖子,应该得到流量.)
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |