У меня есть расширение оболочки Windows, которое использует интерфейс IShellIconOverlayIdentifier для отображения оверлейных значков в файлах и папках. Мое расширение немного похоже на TortoiseCVS или TortoiseSVN.Как я могу программно обновить проводник Windows?
Иногда мне нужно сделать 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, чтобы освободить место прокрутки. Есть ли что-то, что немного менее жестоко?
В TweakUI для XP есть опция «кеш-память для восстановления». Вы можете использовать SPY ++, чтобы посмотреть, что он делает. –
HughE! Могли ли вы решить свою проблему? – A9S6