Como atualizar programaticamente o Windows Explorer?

Tenho uma extensão de shell do Windows que usa IShellIconOverlayIdentifier interface para exibir ícones de sobreposição em arquivos e pastas. Minha extensão é um pouco como TortoiseCVS ou TortoiseSVN.

Às vezes eu preciso fazer o Windows Explorer redesenhar todos os seus ícones. Para fazer isso, eu chamo SHChangeNotify como isso

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)

This atualiza a área de trabalho e o painel direito de qualquer janela aberta do Explorer. Ele não atualiza a árvore de pastas no lado esquerdo de qualquer janela do Explore

Então eu tentei enviar WM_SETTINGCHANGE como isso

SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0) 

no Vista, isso atualiza a árvore de pastas, mas não o painel direit

A combinação deSHChangeNotify() Seguido porWM_SETTINGCHANGE parece funcionar muito bem no Vista. Mas ainda não consigo atualizar a árvore de pastas no XP se for exibid

Alguém tem alguma idéia de como fazer isso melhor?

xiste uma solução melhor para o X

SendingSHCNE_ASSOCCHANGED é um pouco como bater na cabeça do Explorer. Faz com que toda a área de trabalho seja atualizada violentamente e faz com que qualquer janela aberta do Explorer perca a posição de rolagem. Existe algo um pouco menos violento?

questionAnswers(3)

yourAnswerToTheQuestion