| Artículos | 01 FEB 1999

La interfaz del escritorio activo

Tags: Histórico
Cómo aprovechar el escritorio activo desde aplicaciones propias
Francisco Charte.

El escritorio activo, al igual que otros muchos elementos de Windows 98, está gestionado por un componente COM que implementa una cierta interfaz . Conocer dicha interfaz nos permitirá aprovechar un nuevo recurso del sistema .

Windows 95 y NT 4 utilizan el escritorio para mostrar una serie de iconos, accesos directos en su mayor parte, así como un fondo que, opcionalmente, puede contener una imagen . Si se exceptúa la posibilidad de hacer doble clic sobre un cierto icono para abrir el elemento asociado, ciertamente el escritorio de Windows era un elemento estático con más utilidad estética que práctica funcional . No hay que olvidar, lógicamente, que el escritorio es el contenedor de todas las ventanas de aplicación y que esa era, en principio, su finalidad principal .

La aparición de Internet Explorer 4, con su integración de interfaz, aportó novedades interesantes al escritorio, entre ellas el llamado escritorio activo . Este elemento, cuya instalación era opcional en Windows 95 y NT, ha pasado a ser parte integrante de Windows 98, aunque el usuario siempre puede optar por desactivarlo . Al igual que otras novedades incorporadas en Windows 98, el escritorio activo es un paso más en el objetivo de integrar el sistema con la web .

El usuario de Windows dispone de las opciones necesarias para poder personalizar el escritorio activo según sus preferencias . La ventana Propiedades del escritorio cuenta con una nueva página, llamada Web, desde la cual es posible activar y desactivar el escritorio activo, así como añadir y eliminar elementos que, básicamente, pueden ser imágenes, controles ActiveX y documentos HTML . También es posible establecer un protector de pantalla que muestra páginas web a las que se está suscrito, en lugar de iconos volando u otras animaciones, así como fijar un fondo HTML en lugar de una imagen estática .

El escritorio activo es un recurso interesante porque permite integrar en el propio escritorio, como si de un formulario se tratase, diversos componentes no estáticos . Un componente puede ser un documento HTML, por ejemplo, en el que es posible integrar applets Java y controles ActiveX que se ejecutarían directamente en el escritorio en lugar de hacerlo en un cliente web .

Lo que hace que el escritorio activo sea interesante para los programadores, no obstante, es el hecho de que añade al sistema una nueva interfaz . Mediante ella es posible tanto obtener información como personalizar el escritorio activo . Se trata, por consiguiente, de un recurso interesante para, por ejemplo, crear utilidades de personalización del escritorio o, simplemente, conseguir que una aplicación cualquiera muestre directamente un elemento activo en el escritorio .

Uso de la interfaz IActiveDesktop

La interfaz que permite obtener información del escritorio y facilita su manipulación es IActiveDesktop . Al tratarse de una interfaz, un elemento que simplemente es una definición, no es útil de por sí . Será preciso crear el objeto COM que la implementa, utilizando IActiveDesktop como lo que es, una interfaz para comunicarnos con dicho objeto .

Los métodos con que cuenta la interfaz IActiveDesktop pueden dividirse en tres grupos: los que permiten obtener información sobre determinadas opciones, aquellos que permiten modificar esa información y, por último, los que facilitan la manipulación de los componentes que pueden existir en el escritorio .

Para usar los métodos de IActiveDesktop es preciso utilizar diversas estructuras de datos que conoceremos en los puntos siguientes, a medida que se traten dichos métodos . Ha de tenerse en cuenta que todas las cadenas de caracteres entregadas como parámetro o devueltas por IActiveDesktop son cadenas de tipo UNICODE . La mayoría de los métodos siempre toman como último parámetro un entero de 32 bits que ha de ser cero, al ser un parámetro reservado .

Antes de poder usar ninguno de los elementos de la interfaz IActiveDesktop es preciso incluir los archivos de cabecera WinInet . h, ShlObj . h y ShlGuid . h . En el primero se encuentra la definición de constantes que, como INTERNET_MAX_URL_LENGTH, se usan en estructuras del escritorio activo definidas en el segundo archivo . Éste contiene asimismo la declaración de la interfaz IActiveDesktop y todas las constantes relacionadas . ShlGuid . h, por último, almacena los GUID correspondientes al objeto y la interfaz IActiveDesktop .

Los ejemplos propuestos en este artículo están desarrollados con C++ Builder 3, siendo posible usar cualquier otro compilador de C++, Delphi o Visual Basic . Los usuarios de Delphi 4 encontrarán todas las definiciones necesarias en el módulo ShlObj . Si se quiere utilizar Visual Basic es preciso disponer de una librería de tipos que contenga la definición de la interfaz IActiveDesktop y todos los elementos relacionados .

Opciones del escritorio activo

Al hablar de escritorio activo hay que distinguir dos capas: el fondo propiamente dicho, en el que se muestran los componentes activos, y la lista de iconos que hay habitualmente en el escritorio . En Windows 98 el escritorio activo puede desactivarse, obteniendo un escritorio idéntico al de Windows 95/NT . Manteniendo el escritorio activo en su estado original, activado, también puede optarse por desactivar sólo los componentes activos . De esta forma no aparecerían, por ejemplo, la barra de canales, puesto que esa capa está desactivada, pero los iconos ajustarían su funcionamiento al propio del escritorio activo y el fondo HTML seguiría siendo visible .

Para conocer el estado actual del escritorio activo y sus componentes se usa el método GetDesktopItemOptions ( ) de la interfaz IActiveDesktop . El primer parámetro que toma este método es un puntero a una estructura COMPONENTSOPT, mientras que el segundo siempre será cero . Antes de realizar la llamada hay que asignar al miembro dwSize el tamaño de la estructura . Tras la llamada, los miembros fActiveDesktop y fEnableComponents serán true o false dependiendo de que esté activado o no el escritorio activo y sus componentes, respectivamente .

Modificar el estado del escritorio o los componentes es igualmente sencillo . Primero se asignan los valores adecuados a los miembros de la estructura COMPONENTSOPT y a continuación se llama a SetDesktopItemOptions ( ) facilitando los mismos parámetros usados con GetDesktopItemOptions ( ) .

Ninguna modificación efectuada en el escritorio activo es definitiva, escrita en el registro, hasta en tanto no se llame al método ApplyChanges ( ) . Éste toma como único parámetro una de las constantes enumeradas en la Tabla A . Lo habitual es usar AD_APPLY_ALL para activar el cambio, guardarlo en el registro y refrescar el escritorio .

Un sencillo ejemplo, como el del Listado 1, servirá para demostrar en la práctica cómo se usan los métodos GetDesktopItemOptions ( ) y SetDesktopItemOptions ( ) . En el evento asociado a la creación del formulario se utiliza la función estándar CoCreateInstance ( ) para crear el objeto CLSID_ActiveDesktop y obtener un puntero a la interfaz . A continuación se usa el método GetDesktopItemOptions ( ) para obtener el estado del escritorio y los componentes, mostrándolo en dos controles TCheckBox . Como puede apreciarse en la Figura 1, el formulario cuenta con un botón que permite aplicar los cambios que se efectúen en las cajas de selección . El código asociado a dicho botón usa el método SetDesktopItemOptions ( ) para modificar las opciones del escritorio según el estado de los TCheckBox .

El fondo del escritorio

El fondo del escritorio puede mostrar una imagen cualquiera que, según las preferencias del usuario, aparecerá centrada, ajustada al espacio disponible o formando un mosaico . Con

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información