注册表设置使用C#立竿见影的效果(Registry settings immediate effec

2019-06-24 06:57发布

我用下面的代码来禁用控制面板:

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

上面的代码重新启动之后,禁用控制面板,我想立即应用设置而无需重新启动。 请帮我。

Answer 1:

试试这个...

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

这将通知已经作了修改注册表的所有应用程序,以及那些接受通知shuould重新加载它们的设置程序。

请注意,并非所有的应用程序都可以这样做,但是之类的东西控制面板应。



Answer 2:

我没有测试过这一点,但我怀疑你只需要关闭所有的explorer.exe进程,这才会生效。

需要注意的是桌面和任务栏是由Explorer.exe的提供,所以你需要关闭它们毕竟开始一个新的。

这是一个有点敌对的,因为用户可能有他们不想失去资源管理器窗口,这样做只有当它不会惹恼人。 8-)



文章来源: Registry settings immediate effect using C#