Programando para la taskbar de Windows 7

Windows Técnico

Sindicación

Proximos HOLs

Loading...

Voy a publicar hoy un post que llevo tiempo queriendo escribir… Quizás no sea el contenido que muchos esperáis encontraros aquí pero creo que encaja en la temática del blog y que seguramente a más de uno le resultara interesante. Vaya por delante que se van a presuponer algunos conocimientos de programación (mínimos, eso sí) para poder seguir el contenido de esta entrada.

Hoy vamos a ver cómo integrar algunas de las funcionalidades de la nueva barra de tareas (comúnmente llamada Superbar) en nuestros programas. Microsoft ofrece para la descarga el SDK de Windows 7 con multitud de ejemplos y funcionalidades, pero quizás a nosotros para este proyecto se nos quede demasiado grande. Es por eso que comenzaremos bajándonos un paquete llamado Windows API Code Pack. Este pack contiene dlls con métodos que nos permitirán hacer, entre otras cosas, programación orientada a las nuevas funcionalidades de Windows 7. La última versión es de hace poco más de una semana y es la versión 1.0 por lo que podemos entender que esta actualizada a la versión final de Windows 7 y que el código que generemos con esta librería será compatible en todos los clientes que la tengan instalada. Por mi parte decir que estas pruebas se ha realizado sobre un Windows 7 RC 1 (7100) y que, al menos las funcionalidades probadas) funcionan perfectamente.

La descarga del pack nos ofrece un fichero Zip con códigos de ejemplo listo para compilar o un proyecto para Visual Studio que nos compilara las dlls necesarias para empezar a trabajar. En nuestro caso, después de compilar las dlls (se puede hacer con Visual Studio 2008 Express) nos hemos quedado con las nombradas Microsoft.WindowsAPICodePack.dll y Microsoft.WindowsAPICodePack.Shell.dll.

clip_image002

Estas dos dlls las vamos a importar en un nuevo proyecto de Windows Forms y vamos a usarlas para trabajar con la barra de Windows 7.

Antes de continuar hay que explicar cuáles son algunas de las nuevas funcionalidades a las que podemos acceder mediante esta dll y son:

  • Barra de progreso: Podemos mostrar el progreso de nuestra aplicación en la barra de tareas de Windows 7.
  • Miniaturas: ¿Qué ocurre cuando el usuario deja el cursor sobre el icono de nuestra aplicación? ¿Qué se muestra? Bien, mediante esta API podemos definir este comportamiento en nuestra aplicación
  • Overlay Icons: Una funcionalidad poco conocida (al menos yo solo la he visto usar al Windows Live Messenger) es la posibilidad de incluir pequeños iconos sobre el icono de nuestra aplicación para indicar el estado en que se encuentran. Útil para no tener que cambiar todo el icono de la aplicación y modificar solo el estado.

Además de estas funcionalidades (que son las que veremos en la aplicación) existen otras como las Jump List o las barras de acciones para las miniaturas.

Para empezar a trabajar con estas funcionalidades deberemos de asociar a un objeto TaskbarManager la instancia de la barra de tareas actual. Además creamos un objeto de tipo TabbedThumbnailManager para más adelante manejar las thumbnails:

clip_image003

He creado una aplicación sencilla que aglutina unos pocos componentes para permitir comprobar el funcionamiento de las características. La interfaz me ha quedado de la siguiente manera:

clip_image004

Lo que vamos a hacer es que cuando movamos el control TrackBar cambiaremos el valor asociado a la barra de progreso que se dibuja tras el icono en la barra de tareas. Para hacer esto tenemos que controlar el evento de cambio de valor del control TrackBar y llamar al método SetProgressValue.

clip_image005

Lo primero que debemos hacer es establecer un estado para la barra de progreso. Estos pueden ser:

  • Normal (Valor fijo)
  • Indeterminado (La barra de progreso ira de izquierda a derecha sin rellenarse completamente)
  • Error (La barra de progreso se pintara de rojo)
  • Pausada (La barra de progreso será de color amarillo)
  • Sin progreso (Pues eso :P)

Además, como se puede ver, la última línea hace una llamada a SetThumbnailClip. Este método es el que usaremos para definir que miniatura queremos que se presente a los usuarios cuando dejen el cursor sobre nuestra aplicación. En este caso se refiere al recuadro que muestra el valor actual de la barra de progreso.

clip_image006

Para que esto funcione antes deberemos de haber inicializado el control de la siguiente manera:

clip_image007

Para terminar vemos que he incluido una serie de iconos en la aplicación. Estos iconos se pueden pulsar para cambiar el icono que se establecerá sobre el icono de nuestra aplicación. El método SerOverlayIcon nos permite definir un fichero .ico que se establecerá sobre el de nuestra aplicación.

clip_image008

Hemos visto que no es nada difícil el añadir nuevos detalles de usabilidad a nuestros programas para que se integren con las funcionalidades que nos ofrece Windows 7 así que ya no tenéis excusa para no usarlos en vuestros próximos programas, haciendo así mejor la experiencia de vuestros usuarios. Si queréis enredar con el código de ejemplo que he hecho aquí podéis descargarlo desde aquí mismo, compilarlo, cambiarlo y aprender con él.

Y nada más, ¡esto es todo! Un saludo y un placer habernos leído por aquí durante este tiempo.

Hasta pronto,

Pedro Laguna


Enviado ago 14 2009, 03:44 por Pedro Laguna
Adjunto: taskbar.zip

Comentarios

Malakai escrito re: Programando para la taskbar de Windows 7
en 08-17-2009 16:24

Muy interesante! Llevaba tiempo queriéndome poner con algo de este estilo.

Una cuestióncilla... usando VS2010, es necesario utilizar también las DLL's que indicas o vienen ya incorporadas?

Gracias ;)

Pedro Laguna escrito re: Programando para la taskbar de Windows 7
en 08-18-2009 15:53

Pues no tengo ni idea, no he usado todavia la version 2010 :-(

Windows Técnico escrito FALTA 1 SÓLO DÍA PARA EL LANZAMIENTO DE WINDOWS 7
en 10-21-2009 10:05

Buenas a todos, a falta de un día para el lanzamiento de Windows 7 al mercado he querido hacer un post

Añadir un comentario

(requerido)  
(opcional)
(requerido)  
Recordarme
If you can't read this number refresh your screen
Enter the numbers above: