2009-03-15 6 views
19

У меня есть расширение оболочки 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, чтобы освободить место прокрутки. Есть ли что-то, что немного менее жестоко?

+0

В TweakUI для XP есть опция «кеш-память для восстановления». Вы можете использовать SPY ++, чтобы посмотреть, что он делает. –

+1

HughE! Могли ли вы решить свою проблему? – A9S6

ответ

7

Есть ли у кого-нибудь идеи, как это сделать это лучше?

Лично я не знаю. Вы упоминаете программы черепахе, которые делают подобную вещь, поэтому является отличной отправной точкой было бы взглянуть на то, что они делают в их источнике :)

Они выглядят как соответствующие исходные файлы, которые обрабатывают эту проблему:

я отмечаю в методе RebuildIcons в каждом из них будет:

  1. установить размер значков оболочки или глубину цвета к временному значению
  2. обновляет все окна, передавая изменения настроек
  3. сбрасывают размер значка оболочки или глубину цвета к исходному значению
  4. обновляет все окна во второй раз с трансляцией изменения настройки

Возможно, это часть трюка, чтобы заставить все работать в XP.

+1

Прискорбно, что нет лучшего способа. Надеюсь, мы часто это делаем! –

+0

Спасибо за помощь Саймон. – HughE

+0

@jeffamaphone мы не делаем это слишком часто. Несколько раз в день большую часть времени. – HughE

0

Использование Spy ++ посмотреть, что WM_COMMMAND сообщение отправляется при нажатии клавиши F5 в окне проводника или найти какое сообщение меню используется для просмотра/обновления

Затем с помощью FindWindow, чтобы получить окно проводника вы хотите и отправить WM_COMMAND записанную ранее и так далее.

Это интересный способ управления всеми видами программ Windows.

+0

Я пробовал это, но ничего полезного не показывал. Кажется, что удаляет все элементы, а затем повторно добавляет их все. Это определенно не обязательно идти на эти длины, хотя, поскольку он * делает * «обновлять», если вы просто меняете режим отображения на что-то еще и обратно. ': - |' – Synetech

+0

Использование Spy ++ для отслеживания и проверки этих изменений, хотя это технически возможно, является реальной PITA. Вы можете потратить много времени, если вы еще не использовали инструмент. –

0

Вы также можете отправить сообщение WM_KEYDOWN с кодом F5 ко всем открытым окнам проводника. Это немного взломать.

+1

Самый простой способ - не лучший способ в этом случае. – Idan

Смежные вопросы