我的计划设定"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"价值"Hidden".Hovewer我无法刷新资源管理器以考虑此更改.我试过了:
1)
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero);`
Run Code Online (Sandbox Code Playgroud)
2)
SHELLSTATE state = new SHELLSTATE();
state.fShowAllObjects = (uint)1;
SHGetSetSettings(ref state, SSF.SSF_SHOWALLOBJECTS, true);
Run Code Online (Sandbox Code Playgroud)
3)
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 5000, ref dwResult);
Run Code Online (Sandbox Code Playgroud)
4)
SendMessage(HWND_BROADCAST, WM_COMMAND, 28931 /* Refresh */, 0);
Run Code Online (Sandbox Code Playgroud)
什么都行不通.所以我该怎么做?如果我用F5自己刷新资源管理器,那么它可行.Hovewer我想要一些优雅的解决方案,所以它会在任何地方刷新显示,甚至在OpenFile/ SaveFile对话框中,这些都是当前打开的.
我正在使用C#.NET,Win7.
正如所Anders指出的,有一种使用COM刷新资源管理器窗口的简单方法:
Guid CLSID_ShellApplication = new Guid("13709620-C279-11CE-A49E-444553540000");
Type shellApplicationType = Type.GetTypeFromCLSID(CLSID_ShellApplication, true);
dynamic shellApplication = Activator.CreateInstance(shellApplicationType);
dynamic windows = shellApplication.Windows();
for (int i = 0; i < windows.Count; i++)
windows.Item(i).Refresh();
Run Code Online (Sandbox Code Playgroud)
所以这一部分已经完成.Hovewer我仍然需要刷新 …
是的,我知道这似乎是一个愚蠢的问题,它只是一次性的黑客,我需要完成一个有点平凡的任务,所以我可以继续前进更有趣的事情.
编辑:也许更多的信息会有所帮助:我正在尝试从桌面删除一些快捷方式,我需要用户立即看到它被删除(所以他们不必按F5).
我使用以下代码禁用控制面板:
RegistryKey RegKey = Registry.CurrentUser.CreateSubKey(
@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer");
RegKey.SetValue("NoControlPanel", false, RegistryValueKind.DWord);
RegKey.Close();
Run Code Online (Sandbox Code Playgroud)
以上代码仅在重新启动后禁用控制面板,我想立即应用该设置而不重新启动.请帮我.
我正在为Rainmeter使用两个批处理文件,一个用于隐藏所有图标,然后启动Rainmeter,另一个用于显示所有图标,然后退出Rainmeter以使我的桌面恢复正常。
我的最终目标是使这两个批处理文件成为任务栏上的按钮,单击这些按钮可以切换桌面的外观。
到目前为止,我只有两个批处理文件,但它们所做的只是显示和隐藏桌面图标。(我在网上找到了代码,因为我自己无法编写代码)
show.bat
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /V HideIcons /T REG_DWORD /D 0 /F
taskkill /f /im explorer.exe
start explorer.exe
Run Code Online (Sandbox Code Playgroud)
hide.bat
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /V HideIcons /T REG_DWORD /D 1 /F
taskkill /f /im explorer.exe
start explorer.exe
Run Code Online (Sandbox Code Playgroud)
因此,我发现的代码可以正常工作,但比手动隐藏桌面图标要流畅得多……唯一的问题是,当我运行show.bat时,我的图标又回到了我不希望它们进入的位置。
如何使批处理文件更顺畅地显示/隐藏图标,以及如何不使图标四处移动?
PS:只是想强调一下,我真的不知道我发现的代码是如何工作的,因此您可能必须使用ELI5。