使用C#立即生效注册表设置

时间:2009-06-27 06:11:34

标签: c# controlpanel

我使用以下代码禁用控制面板:

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

以上代码仅在重新启动后禁用控制面板,我想立即应用该设置而不重新启动。请帮帮我。

2 个答案:

答案 0 :(得分:6)

试试这个......

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

这将通知所有应用程序已对注册表进行了更改,并且那些接受通知的程序将重新加载其设置。

请注意,并非所有应用程序都可以执行此操作,但控制面板之类的应该是。

答案 1 :(得分:0)

我没有对此进行过测试,但我怀疑您只需关闭所有的explorer.exe进程即可生效。

请注意,桌面和任务栏由explorer.exe提供,因此您需要在关闭它们之后启动一个新桌面。

它有点敌意,因为用户可能拥有他们不想丢失的资源管理器窗口,所以只有在它不会让人烦恼时才这样做。 8 - )