Práctica: Ver cómo ciertas aplicaciones cancelan la reproducción automática usando Spy++

En un artículo anterior en el que expliqué cómo funciona la reproducción automática en Windows 7 comenté que hay aplicaciones que deciden cancelar la reproducción automática bajo ciertas circunstancias. Un ejemplo de este tipo de aplicaciones es la aplicación de grabación de imágenes ISO de Windows 7 (Isoburn.exe), que cancela la reproducción automática si el dispositivo de grabación que está seleccionado en la lista desplegable es el responsable del evento de la reproducción automática. Vamos a verlo gráficamente.

Spy++ es una herramienta de Microsoft presente en Visual Studio. Esta herramienta muestra de manera jerárquica la relación entre ventanas, procesos e hilos del sistema a la vez que muestra información detallada sobre las ventanas y los mensajes asociados. Nada más abrir la herramienta nos encontramos con esta visualización gráfica del árbol de ventanas (cuya raíz es el escritorio):

Spy

Lo primero que notamos es que el número de ventanas que aparecen en el árbol es mucho mayor que el que aparece, por ejemplo, en la pestaña Aplicaciones de Administrador de tareas. Esto se debe a que la pestaña Aplicaciones de Administrador de tareas no muestra todas las ventanas existentes. Entre otras, no muestra ni la ventana correspondiente al propio Administrador de tareas (como es lógico), ni aquella cuyo título es “Program Manager” (lo que actualmente es Explorer.exe), ni las que tengan título en blanco (no tiene sentido mostrar una aplicación sin título en Administrador de tareas). Tampoco se muestran las ventanas que no tengan el atributo visible establecido, las que no aparezcan en la barra de tareas, o las que tengan el estilo WS_EX_TOOLWINDOW.

Abrimos la herramienta de grabación de imágenes de Windows 7 y cambiamos el árbol de visualización para que muestre procesos (menú Spy, Processes, o pulsar Ctrl+P), desplegamos el proceso Isoburn.exe y desplegamos el único hilo asociado (el responsable de la interfaz gráfica):

HiloIsoBurn

Ahora vamos a monitorizar los mensajes que estén relacionados con la ventana primera (la responsable de crear el cuadro de diálogo). Para ello la seleccionamos con el botón derecho y hacemos clic sobre Messages.

Vemos cómo Spy++ abre una nueva ventana para mostrarnos los mensajes involucrados con la ventana correspondiente al cuadro de diálogo de la herramienta de grabación de imágenes de Windows 7. Con dicha ventana en primer plano, introducimos un dispositivo USB y observamos que la pantalla de reproducción automática se muestra. Esto se debe a que la unidad seleccionada era la H: (la unidad de grabación en mi sistema), mientras que la unidad responsable de la reproducción automática era la de mi dispositivo de almacenamiento USB. Vemos que el sistema ha enviado un mensaje interesante: QueryCancelAutoPlay.

CancelAutoplay

Vemos que no se trata de un mensaje de sistema, sino uno registrado expresamente con ese nombre mediante una llamada a la función RegisterWindowMessage. Cuando una aplicación registra un mensaje, el sistema le otorga un identificador de mensaje único situado en el rango hexadecimal 0xC000 – 0xFFFF. Vemos que en este caso el sistema le ha otorgado el identificador 0xC234 al mensaje “QueryCancelAutoplay”. El mensaje justo a continuación es un mensaje de respuesta (marcado con una “R”), cuyo resultado, 0x0, le hace saber al sistema “no, no debes cancelar la reproducción automática”.

Veamos qué ocurre si introducimos un DVD en la unidad H. Lo primero que notamos es que la reproducción automática no se activa. Echamos un vistazo a la ventana de Microsoft Spy++:

CancelAutoplay2

En esta ocasión la respuesta enviada le hace saber al sistema que debe cancelar la reproducción automática, como así ocurre.

En este artículo hemos visto de qué manera ciertas aplicaciones manejan la reproducción automática en Windows mediante el tratamiento de ciertos mensajes enviados a sus ventanas. También hemos visto en qué consiste la herramienta Spy++ de Microsoft, que es muy útil para depurar aplicaciones gráficas Win32 y para aprender cómo funciona el sistema de ventanas y mensajes, cuya importancia es tal que ha dado nombre al sistema operativo.

Leave a Reply

Your email address will not be published. Required fields are marked *