"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
的 "Hidden"
属性。但是我无法刷新资源管理器以使这个更改生效。我尝试了以下方法:1)
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero);`
2)
SHELLSTATE state = new SHELLSTATE();
state.fShowAllObjects = (uint)1;
SHGetSetSettings(ref state, SSF.SSF_SHOWALLOBJECTS, true);
3)
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 5000, ref dwResult);
4)
SendMessage(HWND_BROADCAST, WM_COMMAND, 28931 /* Refresh */, 0);
什么都不起作用。那我该怎么办?如果我自己用F5刷新Explorer,那就可以了。然而,我想要一些优雅的解决方案,这样它就可以在所有地方刷新显示,甚至在当前打开的OpenFile
/SaveFile
对话框中也可以。
我正在使用C# .NET,Win7。
状态更新#1
正如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();
这部分完成了。但是我仍然需要刷新OpenFile
/SaveFile
对话框,上面的代码并不能做到。有人知道如何刷新这些对话框吗?
一个重要的点是,如果我在控制面板的文件夹选项中更改“显示隐藏文件”,那么系统不会刷新这些OpenFile
/SaveFile
对话框,我必须手动按F5刷新它们。我只是想找到一种使用C#刷新所有这些对话框的方法,这样我就不需要再按F5了...
状态更新 #2
好的,所以上面的代码有一个新问题——它不仅刷新windows资源管理器,还刷新internet explorer...有没有办法只刷新windows资源管理器?