Моя программа устанавливает "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);
Ничего не работает. И что же мне делать? Если я сам обновлю Explorer с помощью F5, то он будет работать. Однако мне бы хотелось какое-нибудь элегантное решение, чтобы оно обновляло отображение везде, даже в 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
Итак, новая проблема с кодом выше - он обновляет не только проводники окон, но и интернет-обозреватели ... Есть идеи, как обновить ТОЛЬКО обозреватели окон?