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