我使用以下代码禁用控制面板:
RegistryKey RegKey = Registry.CurrentUser.CreateSubKey(
@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer");
RegKey.SetValue("NoControlPanel", false, RegistryValueKind.DWord);
RegKey.Close();
以上代码仅在重新启动后禁用控制面板,我想立即应用该设置而不重新启动。请帮帮我。
答案 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 - )