Изменить цветность DWM - Windows 7 - PullRequest
1 голос
/ 19 декабря 2011

В настоящее время я пытаюсь написать программу для VB.NET, которая плавно меняет цвета окраски окон DWM в Windows 7.

Сначала я попытался изменить параметры реестра напрямую, но мне пришлось перезапустить службу UXSMS. Это решение было неудовлетворительным из-за переключения панели задач.

Я сейчас ищу функцию в DLL, такую ​​как user32.dll или themecpl.dll, которая может воспроизводить поведение панели управления при настройке цвета окна.

Я сейчас на IDA, ищу функцию adquate (CColorCplPage::SetDwmColorizationColor кажется хорошим!). Если у кого-то есть, поделитесь им!

(Если кому-то нужны экраны или код, пожалуйста, спросите. Извините за мой плохой английский.)

1 Ответ

0 голосов
/ 19 декабря 2011

Ваша первая попытка не удалась, поскольку редактирование реестра вручную никогда не является правильным способом изменения настроек системы.Как вы узнали, многие компоненты Windows (и другие приложения!) Считывают эти значения конфигурации один раз и кэшируют их, предотвращая распространение ваших изменений.Другая проблема (и вы будете удивлены, как часто я это вижу) - это приложения, которые пытаются обойти в реестре, как правило, портят вещи.

Вместо этого вам следует вызвать документированный API для изменения настроек.Почти всегда есть документированный способ сделать это, и если нет, то тогда вам не следует этого делать.

Это, похоже, один из таких случаев.Есть документированная DwmGetColorizationColor функция, но нет соответствующей DwmSetColorizationColor функции, как можно было бы ожидать.

Причина в том, что пользователь должен быть единственным, кто может изменять свои настройки окраски, а не другие приложения.Вы можете пообещать не злоупотреблять этим и вносить такие изменения только по явному запросу пользователя, но не всем приложениям можно доверять.Многие люди использовали бы его злонамеренно, поэтому эти функции не были задокументированы и раскрыты.

Но, как обычно, если вы нажимаете на, вы обычно можете найти недокументированный способ выполнения действий.Проблема с использованием недокументированных функций заключается в том, что нет гарантии, что они будут работать или продолжать работать.Их намеренно оставили недокументированными, потому что они могут измениться в новых версиях Windows.Вы должны использовать их только на свой страх и риск.

В этом случае, если вы используете программу типа DumpBin для получения списка всех экспортируемых функций из библиотеки DWM (dwmapi.dll), вы увидитеряд недокументированных экспортируемых функций.

Вам интересны DwmGetColorizationParameters и DwmSetColorizationParameters.Обе эти функции принимают структуру COLORIZATIONPARAMS в качестве аргумента, который содержит необходимые им значения.

Итак, вам необходимо выполнить обратный инжиниринг этих функций и получить соответствующие определения.Затем вы можете вызвать функцию DwmGetColorizationParameters, передав структуру COLORIZATIONPARAMS, чтобы получить текущие настройки конфигурации;изменить элемент структуры, который содержит текущий цвет окраски;и затем передайте эту модифицированную версию структуры в функцию DwmSetColorizationParameters.

Я упоминал, что не рекомендую делать это?

...