Похоже, что вызов SHChangeNotify в Windows не вызывает обновления элементов на панели QuickAccess (или любых папок настраиваемого пространства имен, расположенных в левой части Проводника).Похоже, что расширение дерева слева до папки работает нормально, как и все в главном представлении справа.
Мы вызываем SHChangeNotify из приложения ac # WPF, хотя SHChangeNotify кажется, чтовызовите нашу DLL-ловушку в проводнике просто для чего-либо в правильном представлении.В конечном итоге это вызовет именованный канал, который вернется в наш код на c #, чтобы вызвать обновление значка файла или папки.
Это то, что мы вызываем из c #:
[DllImport("shell32.dll", CharSet = CharSet.Auto)]
private static extern void SHChangeNotify(
int wEventId,
uint uFlags,
IntPtr dwItem1,
IntPtr dwItem2);
var ptr = Marshal.StringToHGlobalUni(fullPath);
SHChangeNotify((int)SHCNE.SHCNE_UPDATEITEM, (int)(SHCNF.SHCNF_PATHW | SHCNF.SHCNF_FLUSHNOWAIT), ptr, IntPtr.Zero);
Marshal.FreeHGlobal(ptr);
Можно предположить, что все константы и перечисления определены правильно.
Вот так выглядят значки:
Обратите внимание, что серый значокзначок по умолчанию.Зеленый значок в главном окне был вызван вызовом функции выше с путем C:\Users\Test User\Pocket Test
.Я думаю, что это должно вызвать обновление для обеих папок.
Я также пытался заменить SHCNF_FLUSHNOWAIT
на SHCNF_FLUSH
.Я в недоумении о том, как действовать здесь.Любые идеи о том, как принудительно обновить папки на левой панели в Проводнике?