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

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

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

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

试试这个…

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

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

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

我没有测试过这个,但我怀疑你只需关闭所有的explorer.exe进程就可以生效了。

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

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