2011-12-19 4 views
1

В настоящее время я пытаюсь написать программу в VB.NET, которая плавно изменяется в окно расцвечивания цвета DWM в ОС Windows 7.Изменить DWM раскрашивание - Windows 7

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

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

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

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

ответ

0

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

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

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

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

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

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

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

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

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

+0

сначала, спасибо за вашу помощь. Я знаю, что только пользователь должен изменить этот король настройки, но я просто хочу написать небольшую программу для личного использования, ничего плохого: p. Кроме того, я уже видел такие функции, как 'DwmSetColorizationParameters', но документы, где часто ошибочно. Итак, я буду делать обратную разработку на dwmapi и искать эту функцию. Спасибо за вашу помощь ! – Agma

+0

@ Агма: Да, справедливо. Я не знаю, насколько вы знаете об обратном проектировании, но 'dwmapi.dll' - это подходящее место для поиска. Это все исключительно функции DWM, доступные только в Vista или более поздней версии, поэтому все они будут экспортированы из этой DLL. Вы не найдете их в 'user32.dll' или любой панели управления. Я не уверен в законности публикации обратного инженерного кода на открытом форуме, поэтому я не решался публиковать определения этих функций/структур. Если вам нужна дополнительная помощь, дайте мне знать. –

+0

Понял, что я забыл, что доступны только экспортируемые функции:) Но я не нашел ссылки на 'DwmSetColorizationParameters' (экспортирован или нет). Кажется, что эта функция присутствовала в Windows Vista, но исчезла в семи окнах. Кроме того, если получено достоверное определение структуры COLORIZATIONPARAMS :) – Agma