【发布时间】:2011-01-30 03:08:36
【问题描述】:
我的程序设置"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 资源管理器吗?
【问题讨论】:
-
@SLaks:也许它是一个调整工具?
-
@SLaks:对,因为发帖人有 1 个代表,所以没想过要检查以前的问题。
-
@SLaks:链接中的应用程序与这个不同,我一次开发更多应用程序。这个问题中的应用程序只是一个程序,它注册一个热键(例如 Ctrl+H),它将切换资源管理器“隐藏”设置并刷新资源管理器...
-
我明白了;听起来很有用。我道歉。不过我没有答案
标签: c# .net windows windows-7 windows-explorer