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?