2

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

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

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

4

2 回答 2

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

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

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

于 2009-06-27T11:53:19.157 回答
0

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

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

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

于 2009-06-27T06:52:38.780 回答