¿Cómo puedo actualizar mediante programación el Explorador de Windows?
-
22-07-2019 - |
Pregunta
Tengo una extensión de shell de Windows que usa IShellIconOverlayIdentifier interfaz para mostrar iconos superpuestos en archivos y carpetas. Mi extensión es un poco como TortoiseCVS o TortoiseSVN .
A veces necesito hacer que el Explorador de Windows vuelva a dibujar todos sus íconos. Para hacer esto, llamo a SHChangeNotify de esta manera:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
Esto actualiza el escritorio y el panel derecho de cualquier ventana de explorador abierta. No actualiza el árbol de carpetas en el lado izquierdo de ninguna ventana del Explorador.
Así que intenté enviar WM_SETTINGCHANGE de esta manera :
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
en Vista, esto actualiza el árbol de carpetas, pero no el panel derecho.
La combinación de SHChangeNotify ()
seguida de WM_SETTINGCHANGE
parece funcionar bastante bien en Vista. Pero todavía no puedo actualizar el árbol de carpetas en XP si se muestra.
¿Alguien tiene alguna idea de cómo hacerlo mejor?
¿Existe una mejor solución para XP?
Enviar SHCNE_ASSOCCHANGED
es un poco como el Clubbing Explorer sobre la cabeza. Hace que todo el escritorio se actualice bastante violentamente y causa que cualquier ventana abierta del Explorador pierda su posición de desplazamiento. ¿Hay algo que sea un poco menos violento?
Solución
¿Alguien tiene alguna idea de cómo hacerlo? esta mejor?
Personalmente no lo sé. Usted menciona los programas de Tortoise que hacen algo similar, por lo que un excelente punto de partida sería echar un vistazo a lo que hacen en su fuente :)
Estos parecen ser los archivos fuente relevantes que manejan este problema:
- TortoiseCVS - ShellUtils.cpp
- TortoiseSVN - ShellUpdater.cpp (nombre de usuario: " invitado " ;, contraseña: " ")
Observo en el método RebuildIcons
en cada uno de ellos:
- establezca el tamaño del icono del shell o la profundidad de color en un valor temporal
- actualiza todas las ventanas transmitiendo el cambio de configuración
- restablece el tamaño del icono del shell o la profundidad de color al valor original
- actualiza todas las ventanas por segunda vez con una transmisión del cambio de configuración
Quizás esto sea parte del truco para que las cosas funcionen en XP.
Otros consejos
Use spy ++ para ver qué mensaje WM_COMMMAND se envía cuando presiona F5 en el explorador de Windows o encuentra qué mensaje de menú se usa para ver / actualizar
Luego use FindWindow para obtener la ventana del explorador que desea y envíele el mensaje WM_COMMAND grabado anteriormente, etc.
Esta es una forma divertida de controlar todo tipo de programas de Windows.
También puede enviar un mensaje WM_KEYDOWN con el código clave F5 a todas las ventanas abiertas del explorador. Sin embargo, esto es un truco.