2012-10-16 3 views
3

Windows가 윈도우의 비 클라이언트 영역을 테마의 색상 인 Windows Aero로 자동 설정했다는 것을 알았습니다. 이것이 프로그램 전반에 걸쳐 주제를 일관되게 만들고 일반적으로 더 좋은 인터페이스를 만들기 때문에 이것은 생각하기에 좋은 아이디어입니다. 악의적 인 개인으로서 여기에서 Microsoft의 의도를 뒤엎고 운영 체제의 설정이 아니라 내 프로그램에서 설정된 색상을 사용하는 GUI를 얻으려고합니다.비 클라이언트 영역에서 Windows Aero 색상을 변경하는 방법이 있습니까?

생각하십니까?

답변

5

예, 가능하지만 문서화되지 않은 기능을 사용해야합니다. 즉, 프로그램이 향후 Windows 버전에서 실행되지 않거나 서비스 팩이나 기타 업데이트가 릴리스 된 경우에도 마찬가지입니다.

위험을 감수하려는 경우 this blog post has full details 기능을 리버스 엔지니어링하고 사용 방법을 리버스 엔지니어링하십시오. DwmGetColorizationParametersDwmSetColorizationParameters : Screenshot of Delphi DWM Aero glass color changes

는 기본적으로, 당신이 필요로하는 두 가지 기능이 있습니다 : 그것은 당신이 무엇을 달성 할 수의 스크린 샷이 포함되어 있습니다. 구조는 당신이 그들에게 전달하고 방법의 프로토 타입은 (델파이,하지만 난 당신이 당신이 사용하고있는 거라면 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 . (우수한 게시물이며 트래픽이 필요합니다.)

관련 문제