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?

¿Fue útil?

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:

Observo en el método RebuildIcons en cada uno de ellos:

  1. establezca el tamaño del icono del shell o la profundidad de color en un valor temporal
  2. actualiza todas las ventanas transmitiendo el cambio de configuración
  3. restablece el tamaño del icono del shell o la profundidad de color al valor original
  4. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top