2011-12-19 1 views
1

나는 현재 유동적 내가 먼저 직접 레지스트리 값을 편집하려 7.변경 DWM 색상 지정 - 윈도우 7

Windows에서 DWM 창 색상 화 색상을 변경 VB.NET에서 프로그램을 작성하기 위해 노력하고있어,하지만 난했다 UXSMS 서비스를 다시 시작합니다. 이 솔루션은 작업 표시 줄의 전환으로 인해 불만족 스러웠습니다.

윈도우 색상을 설정할 때 제어판의 동작을 재현 할 수있는 user32.dll 또는 themecpl.dll과 같은 DLL 함수를 찾고 있습니다.

저는 IDA에서 적절한 기능을 찾고 있습니다 (CColorCplPage::SetDwmColorizationColor). 누구든지 가지고 있다면 공유하십시오! 수동으로 레지스트리를 편집하는 결코 시스템 설정을 변경하는 올바른 방법이기 때문에

는 (사람이 화면 또는 코드가 필요한 경우 문의하시기 바랍니다. 불쌍한 내 영어 죄송합니다.)

답변

0

첫 번째 시도가 실패했습니다. 당신이 알아 냈던 것처럼 많은 Windows 구성 요소 (및 다른 응용 프로그램!)는 해당 구성 값을 한 번 읽고 캐시하여 변경 사항이 전파되지 않도록합니다. 또 다른 문제는 (그리고 내가 얼마나 자주 이것을 보는지 놀랄 것입니다) 레지스트리에서 일반적으로 엉망으로 만들려고 시도하는 응용 프로그램은 일반적으로 물건을 손상시킵니다.

대신 문서화 된 API를 호출하여 설정을 변경해야합니다. 이 작업을 수행하는 방법은 거의 항상 문서화되어 있습니다. 그렇지 않은 경우 잘 수행하면 안됩니다.

이것은 이러한 경우 중 하나 인 것으로 보입니다. 문서화 된 DwmGetColorizationColor 함수가 있지만 해당하는 DwmSetColorizationColor 함수가 없습니다.

이유는 사용자이 다른 응용 프로그램이 아닌 자신의 색 상화 설정을 변경할 수있는 유일한 사람이되기 때문입니다. 이를 악용하지 말고 사용자의 명시 적 요청만으로 변경을 수행 할 것을 약속 할 수 있지만 모든 응용 프로그램이이 작업을 수행 할 수있는 것은 아닙니다. 많은 사람들이 그것을 악의적으로 사용하기 때문에 이러한 기능은 문서화되어 노출되지 않았습니다.

하지만 평소와 같이을 누르면 보통 문서화되지 않은 방법으로 작업 할 수 있습니다. 문서화되지 않은 함수를 사용할 때의 문제점은 그들이 작동하거나 계속 작동 할 것이라는 보장이 없다는 것입니다. 새로운 버전의 Windows에서 변경 될 수 있기 때문에 의도적으로 문서화되지 않은 상태로 남았습니다. 자신의 책임하에 사용해야합니다.

이 경우 DumpBin과 같은 프로그램을 사용하여 DWM DLL (dwmapi.dll)에서 내 보낸 모든 함수의 목록을 가져 오는 경우 문서화되지 않은 많은 내 보낸 함수가 표시됩니다.

관심있는 항목은 DwmGetColorizationParametersDwmSetColorizationParameters입니다. 이 두 함수는 모두 필요한 값을 포함하는 인수로 COLORIZATIONPARAMS 구조체를 사용합니다.

따라서 이러한 기능을 리버스 엔지니어링하고 적절한 정의를 얻어야합니다. 그런 다음 구조를 전달하여 DwmGetColorizationParameters 함수를 호출하여 현재 구성 설정을 가져올 수 있습니다. 현재 색상 화 색상이 들어있는 구조체의 멤버를 수정합니다. 구조체의 수정 된 버전을 DwmSetColorizationParameters 함수에 전달하십시오.

이 작업을 수행하지 않는 것이 좋습니다.

+0

먼저 감사합니다. 나는 그 사용자 만이 설정의 왕을 편집하기로되어 있다는 것을 알고 있지만, 나는 개인적인 사용을위한 작은 프로그램을 만들고 싶다. 또한,'DwmSetColorizationParameters'와 같은 함수를 이미 보았습니다. 그러나 문서는 자주 잘못되었습니다. 그래서 dwmapi에 대해 리버스 엔지니어링을 수행하고이 기능을 검색 할 것입니다. 당신의 도움을 주셔서 감사합니다 ! – Agma

+0

@Agma : 예, 충분합니다. 나는 리버스 엔지니어링에 대해 얼마나 많이 알고 있는지 모르지만'dwmapi.dll '은 볼만한 곳이다. 이것들은 모두 Vista에서만 사용 가능한 독점적 인 DWM 기능이므로 모두 해당 DLL에서 내보낼 수 있습니다. 'user32.dll' 또는 컨트롤 패널에서 찾을 수 없습니다. 하지만 공개 포럼에 리버스 엔지니어링 된 코드를 게시하는 것이 합법인지는 모르겠으므로 이러한 함수/구조에 대한 정의를 게시하는 것을 주저했습니다. 좀 더 도움이 필요하시면 알려주세요. –

+0

이해하지만 수출 된 함수 만 사용할 수 있다는 사실을 잊어 버렸습니다.) 그러나'DwmSetColorizationParameters' (수출 여부)에 대한 참조를 찾지 못했습니다.이 함수는 Windows Vista에 있지만 Windows 7에서는 사라진 것처럼 보입니다. 또한, 'COLORIZATIONPARAMS' 구조체의 유효한 정의가있는 경우 : – Agma