2015-09-27 1 views
-1

Для внесения изменений потребуется много изменений реестра, чтобы снова выйти из системы. Однако, если нажать на кнопку Apply в разделе Appearance and Personalisation, внешний вид обновляется без необходимости выхода из системы:Можно ли программно вызвать кнопку «Применить» на панели управления?

Apply Button

Интересно, если для Windows предоставляет API для этой функции, так что его можно назвать программным без подписи вне?

Было бы намного легче проверить некоторые параметры, если бы можно было просто запустить консольное приложение или сценарий PowerShell для фиксации изменений.

+0

Один способ, которым я могу представить это с помощью автоматизации пользовательского интерфейса. – cubrr

+0

Вы можете посмотреть, что на самом деле делает кнопка, вместо того, чтобы пытаться щелкнуть ее. Это может быть отправка простого измененного изменения настроек, которое не было бы слишком сложно сделать с p/invoke и отправить сообщение. –

+0

@RonBeyer Я думаю, это было бы слишком легко ... или я еще не знаю, как это сделать. Файлы '* .cpl' не могут быть декомпилированы (не .NET), а' ProcessMonitor', похоже, не может регистрировать сообщения Windows, не так ли? – t3chb0t

ответ

3

Если это задокументированный способ изменить настройки с помощью API, вы должны предпочесть, что при изменении реестра напрямую. Для многих настроек вы можете использовать SystemParametersInfo function.

Предполагая, что это не делает трюк, вы можете использовать тот же способ, чтобы уведомлять приложения о том, что что-то изменилось: оно транслирует WM_SETTINGCHANGE message. Многие приложения прослушивают это сообщение и перезагружают свои настройки, когда они его получают.

Быстрый поиск объявился C# версии этой трансляции: c# Registry - commit changes on the MSDN forums

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, (UIntPtr)0, "Environment", SendMessageTimeoutFlags.SMTO_ABORTIFHUNG, 5000, out result); 
+0

Я попробую позже и посмотрю, появится ли экран «Подождите ...». – t3chb0t

+0

Я использовал ключ реестра для 'WindowMetrics' в вызове единственное приложение, которое обработало обработчик этого сообщения обработчиком JDownloader ;-) Я думаю, мне нужно поймать все сообщения, отправленные из окна дисплея (если это возможно), и посмотреть, что он делает, если для этого используются какие-либо сообщения. Я надеялся, что возникнет волшебный призыв к некоторому API-интерфейсу ReloadSomeRegistrySettings, который будет делать трик. – t3chb0t