У меня есть расширение оболочки Windows, которое использует IShellIconOverlayIdentifier интерфейс для отображения значков наложения на файлы и папки. Мое расширение немного похоже на TortoiseCVS или TortoiseSVN .
Иногда мне нужно заставить Windows Explorer перерисовать все его иконки. Для этого я вызываю SHChangeNotify , например:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
Это обновляет рабочий стол и правую панель любых открытых окон проводника. Он не обновляет дерево папок в левой части окон Windows.
Итак, я попытался отправить WM_SETTINGCHANGE так:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
в Vista обновляет дерево папок, но не правую панель.
Комбинация SHChangeNotify()
с последующим WM_SETTINGCHANGE
, похоже, очень хорошо работает в Vista. Но я все еще не могу обновить дерево папок в XP, если оно отображается.
У кого-нибудь есть идеи, как сделать это лучше?
Есть ли лучшее решение для XP?
Отправка SHCNE_ASSOCCHANGED
немного похожа на клубного Исследователя над головой. Это заставляет весь рабочий стол довольно сильно обновляться и приводит к тому, что любые открытые окна Проводника теряют позицию прокрутки. Есть что-нибудь менее насильственное?