Настройки реестра немедленного действия с использованием C #

Я использовал следующий код для отключения панели управления:

<code>RegistryKey RegKey = Registry.CurrentUser.CreateSubKey(
    @"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer");
RegKey.SetValue("NoControlPanel", false, RegistryValueKind.DWord); 
RegKey.Close();
</code>

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

 Coding Monkey27 июн. 2009 г., 09:02
Это, вероятно, лучше всего спросить наserverfault.com
 John Saunders27 июн. 2009 г., 16:10
Я полагаю, вы знаете, что вы можете сделать это с помощью групповой политики, поэтому я также предполагаю, что у вас есть причины не делать этого таким образом.

Ответы на вопрос(2)

Попробуй это...

private const int HWND_BROADCAST = 0xffff;
private const int WM_WININICHANGE = 0x001a, WM_SETTINGCHANGE = WM_WININICHANGE, INI_INTL = 1;

SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, INI_INTL);

[DllImport("user32.dll")]
private static extern int SendMessage(int hWnd, uint wMsg, uint wParam, uint lParam);

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

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

 Suriyan Suresh03 июл. 2009 г., 14:28
Есть ли другой способ обновить реестр немедленно?
 Suriyan Suresh02 июл. 2009 г., 14:38
не повезло с использованием приведенного выше кода

но я подозреваю, что вам нужно только закрыть все процессы explorer.exe, чтобы это вступило в силу.

Обратите внимание, что рабочий стол и панель задач предоставлены explorer.exe, поэтому вам нужно будет запустить новый после закрытия их всех.

Это немного враждебно, потому что у пользователя могут быть окна Проводника, которые они не хотят потерять, поэтому делайте это, только если это не раздражает людей. 8-)

Ваш ответ на вопрос