Настройки реестра немедленного действия с использованием C # - PullRequest
2 голосов
/ 27 июня 2009

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

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

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

Ответы [ 2 ]

6 голосов
/ 27 июня 2009

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

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);

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

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

0 голосов
/ 27 июня 2009

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

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

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

...