Ваша первая попытка не удалась из-за ручного редактирования реестра является никогда правильный путь для изменения настроек системы. Как вы узнали, многие компоненты Windows (и другие приложения!) Читают эти значения конфигурации один раз и кэшируют их, предотвращая распространение ваших изменений. Еще одна проблема (и вы будете удивлены, как часто я это вижу) - это приложения, которые пытаются обмануть в реестре, как правило, в конечном итоге развращают вещи.
Вместо этого вы должны позвонить документированному API для изменения настроек. Существует почти всегда документированный способ сделать это, а если нет, то тогда вы не должны этого делать.
Это, по-видимому, один из этих случаев. Есть документально зарегистрированная функция DwmGetColorizationColor
, но нет соответствующей функции DwmSetColorizationColor
, как и следовало ожидать.
Причина в том, что пользователь должен быть единственным, кто может изменить свои настройки раскраски, а не другие приложения. Вы можете пообещать не злоупотреблять этим и делать такие изменения только по явному запросу пользователя, но не всем приложениям можно доверять, чтобы это сделать. Многие люди будут использовать его злонамеренно, поэтому эти функции не были документированы и не раскрыты.
Но, как обычно, если вы нажмете, вы обычно можете найти недокументированный способ делать что-то. Проблема с использованием недокументированных функций заключается в том, что нет гарантии, что они будут работать или продолжать работать. Они были намеренно оставлены недокументированными, потому что они могут измениться в новых версиях Windows. Вы должны использовать их только на свой страх и риск.
В этом случае, если вы используете программу DumpBin для получения списка всех экспортированных функций из DWM DLL (dwmapi.dll
), вы увидите ряд недокументированных экспортированных функций.
Те, которые вас интересуют, являются DwmGetColorizationParameters
и DwmSetColorizationParameters
. Обе эти функции принимают структуру COLORIZATIONPARAMS
как аргумент, который содержит нужные им значения.
Итак, вам необходимо выполнить обратное проектирование этих функций и получить соответствующие определения. Затем вы можете вызвать функцию DwmGetColorizationParameters
, передав структуру COLORIZATIONPARAMS
для получения текущих настроек конфигурации; изменить член структуры, который содержит текущий цвет раскраски; а затем передать эту модифицированную версию структуры функции DwmSetColorizationParameters
.
Я упоминал, что я не рекомендую это делать?
сначала, спасибо за вашу помощь. Я знаю, что только пользователь должен изменить этот король настройки, но я просто хочу написать небольшую программу для личного использования, ничего плохого: p. Кроме того, я уже видел такие функции, как 'DwmSetColorizationParameters', но документы, где часто ошибочно. Итак, я буду делать обратную разработку на dwmapi и искать эту функцию. Спасибо за вашу помощь ! – Agma
@ Агма: Да, справедливо. Я не знаю, насколько вы знаете об обратном проектировании, но 'dwmapi.dll' - это подходящее место для поиска. Это все исключительно функции DWM, доступные только в Vista или более поздней версии, поэтому все они будут экспортированы из этой DLL. Вы не найдете их в 'user32.dll' или любой панели управления. Я не уверен в законности публикации обратного инженерного кода на открытом форуме, поэтому я не решался публиковать определения этих функций/структур. Если вам нужна дополнительная помощь, дайте мне знать. –
Понял, что я забыл, что доступны только экспортируемые функции:) Но я не нашел ссылки на 'DwmSetColorizationParameters' (экспортирован или нет). Кажется, что эта функция присутствовала в Windows Vista, но исчезла в семи окнах. Кроме того, если получено достоверное определение структуры COLORIZATIONPARAMS :) – Agma