Escolar Documentos
Profissional Documentos
Cultura Documentos
Introducción
Tips
Referencias
Introducción
En este documento se hará una introducción
práctica al mundo de los Microsoft Gadgets.
Al finalizar el curso y tan solo teniendo unos
pocos conocimientos de HTML, Javascript o
VBScript, usted podrá construir fácilmente
aplicaciones ingeniosas y útiles para ejecutar
en su sistema operativo Windows Vista.
Para ubicar Windows Sidebar haga Clic en el botón “Start”, luego en “All Programs”,
diríjase a “Accessories” y por último a “Windows Sidebar”
Componentes de un Gadget
Un Gadget funciona como una página HTML corriente, con el agregado funcional de
interactuar poderosamente con Windows Vista y ejecutarse como una aplicación en el
escritorio del usuario.
• Archivo manifiesto: Es el archivo XML que define las propiedades del Gadget,
incluyendo nombre, icono y descripción.
• Archivo HTML: Define el cuerpo del Gadget y contendrá la interfaz gráfica con la que el
usuario podrá interactuar desde su escritorio.
Nota: Un Gadget podría funcionar simplemente con el archivo Manifiesto y el archivo HTML
de la interfaz de usuario, pero para dimensionar al máximo el potencial de estas
aplicaciones y lograr un codificación de fácil mantenimiento, se sugiere la utilización de
todos los componentes antes mencionados.
Para desarrollar sus propios Gadgets necesitará cumplir con los siguientes requerimientos:
• Elegir un aplicativo para desarrollar los archivos que componen e interactúan con
el Gadget. Puede usar Microsoft Notepad o, si lo desea, algún otro editor con
capacidades avanzadas de diseño como Visual Studio 2005.
Creando un Gadget Paso a Paso
Crear un Gadget es tan simple como crear una página Web y añadirle funcionalidad con
algún lenguaje de Scripting. A continuación se explican los pasos necesarios para lograrlo,
que serán complementados con un ejemplo práctico que podrá servirle de referencia para
empezar a crear sus propios Gadgets.
Se debe crear un directorio para almacenar los archivos que serán desarrollados para el
funcionamiento completo del Gadget.
\Users\%userprofile%\AppData\Local\Microsoft\Windows Sidebar\Gadgets
b. Si se desea que el Gadget esté disponible para todos los usuarios de la PC,
entonces escriba la siguiente sentencia:
Dentro de este directorio y con el objetivo de mantener el orden dentro del desarrollo, se
podrán generar 3 nuevos subdirectorios llamados css, js e imágenes, que serán
utilizados posteriormente.
Paso 2: Crear el archivo XML para el manifiesto del Gadget
El archivo manifiesto del Gadget almacena las configuraciones que serán utilizadas por el
aplicativo. Es un archivo de texto plano con formato XML que se puede modificar fácilmente.
<gadget>
<name>Nombre del Gadget</name>
<namespace>Namespace.Ejemplo</namespace>
<version>1.0</version>
<author name="Nombre del autor">
<info url="http://www.webdelautor.com" />
<logo src="logo.png"/>
</author>
<copyright>© 2007</copyright>
<description>Aquí va la descripción del Gadget</description>
<icons>
<icon height="48" width="48" src="iconoDelGadget.png" />
</icons>
<hosts>
<host name="sidebar">
<base type="HTML" src="InterfazVisualDelGadget.html" />
<permissions>full</permissions>
<platform minPlatformVersion="1.0" />
<defaultImage src="drag.png" />
</host>
</hosts>
</gadget>
Elemento Descripción
<name> En este elemento se define el nombre del Gadget
Dentro de este elemento se definen los datos del autor del Gadget.
<author> Tiene sub elementos que permiten destacar el sitio web y el logo
del autor.
Este elemento permite brindar una descripción sobre la
<description>
funcionalidad del Gadget
Su atributo Src indica a Windows Sidebar qué archivo HTML
<base>
contiene la interfaz de usuario del Gadget
Paso 3: Crear la interfaz gráfica del Gadget
Estas interfaces serán soportadas por archivos HTML que pueden contener cualquiera de
los elementos comúnmente permitidos por los mismos.
La interfaz gráfica con el usuario puede estar basada en elementos simples del estándar
HTML como listas desplegables, casillas de selección simple o múltiple, cajas de texto, etc.
o bien puede estar desarrollada con un sofisticado diseño en flash, o una combinación de
ambos métodos, por mencionar algunas opciones.
En cualquier caso, estas páginas harán uso de las funciones Javascript necesarias para
interactuar con el modelo de objetos Gadget (del que se hablará más adelante) para brindar
los servicios deseados al usuario.
Siguiendo con los pasos necesarios para hacer funcionar un Gadget realizaremos las
siguientes acciones
En la misma ubicación, puede generar el archivo un archivo HTML para que el usuario
realice las configuraciones funcionales necesarias que usted, como desarrollador, desee
exponer
Es una buena práctica centralizar las configuraciones visuales de los archivos HTML
que se exponen al usuario en uno o varios archivos de hoja de estilo en cascada (con
extensión .css). En ese caso se pueden almacenar en el directorio css que hemos
generado en el primer paso para tal fin
De la misma manera, las imágenes que sean utilizadas por las pantallas HTML que se
hayan creado, pueden ser almacenadas dentro del directorio imágenes, también creado
durante el primer paso
Paso 4: Programar la funcionalidad deseada
Una vez que se ha definido la interfaz gráfica, podrá hacer uso de su talento como
programador Javascript o VBScript para dar vida a sus Gadgets.
Deberá desarrollar toda la funcionalidad que se desee para interactuar con la interfaz
HTML creada. Se podrá codificar en VBScript o Javascript para acceder al modelo de
objetos expuesto por DHTML y brindar al usuario los servicios definidos para el Gadget
El modelo de objetos DHTML se ve extendido en Windows Vista para interactuar con los
objetos y eventos de Windows Sidebar e interactuar con el sistema operativo,
accediendo, entre otras, a las funcionalidades de:
• System.Display
• System.Environment
• System.Globalization
• System.Machine
• System.Net.NetworkInformation
• System.Shell
Paso 5: Probar, Depurar e Instalar el Gadget en Windows Sidebar.
La Galería de Gadgets reconoce todos los Gadgets que están ubicados en las
siguientes direcciones:
• \Users\%userprofile%\AppData\Local\Microsoft\Windows Sidebar\Gadgets
(gadgets propios de cada usuario)
• \Program Files\Windows Sidebar\Shared Gadgets (gadgets que a los que
pueden acceder todos los usuarios de la computadora)
• \Program Files\Windows Sidebar\Gadgets (gadgets que ya vienen instalados
con Windows Vista)
Tips
¾ El ancho de nuestros Gadgets no deben superar los 130px.
¾ Se puede crear un paquete de instalación de nuestro Gadget para que, sólo con
un doble clic, se instale y se agregue en la Sidebar. Para ello, seleccionamos y
comprimimos todos los archivos y carpetas que forman nuestro Gadget. Dado
que el ZIP quedará con el formato NombreDeGadget.gadget.zip, le quitamos la
extensión zip. Con solo darle doble clic al archivo comprimido se instalará
nuestro Gadget.
Radio Gadget: Un ejemplo Paso a Paso
Crearemos un Gadget que ofrezca la posibilidad de escuchar radio vía Internet y permita al
usuario configurar al menos cinco estaciones de radio favoritas.
Con el editor de código que hayamos decidido utilizar, creamos un archivo XML manifiesto
llamado gadget.xml. Este archivo debe ser generado en la raíz del directorio Radio.Gadget
que creamos en el paso anterior.
Es momento de crear la interfaz visual con la cual el usuario accederá a las funcionalidades
y configuraciones del Gadget que se está desarrollando.
<html>
<head>
<title>Radio</title>
<script language="javascript" src="js/logica.js" type="text/javascript"></script>
<script for="mPlayer"
event="playstatechange(newstate)">CambioEstado(newstate);</script>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
...
En la página Radio.html también se escribirá código para representar los botones que
permitan almacenar las radios favoritas, subir y bajar el volumen y reproducir o detener la
transmisión. Así mismo será necesario colocar el objeto de Windows Media Player para
obtener el servicio requerido.
…
<body>
<g:background id="fondoDinamico" />
<div>
<div id="favoritos" style="position:absolute; left:8; top:65.5;">
<img id="btn01" src="imagenes/btn01.png"
onmouseenter="btn01.src='imagenes/btn01Hover.png'"
onmouseleave="btn01.src='imagenes/btn01.png'"
onclick="Sintonizar('1')">
<img id="btn02" src="imagenes/btn02.png"
onmouseenter="btn02.src='imagenes/btn02Hover.png'"
onmouseleave="btn02.src='imagenes/btn02.png'"
onclick="Sintonizar('2')">
<img id="btn03" src="imagenes/btn03.png"
onmouseenter="btn03.src='imagenes/btn03Hover.png'"
onmouseleave="btn03.src='imagenes/btn03.png'"
onclick="Sintonizar('3')">
<img id="btn04" src="imagenes/btn04.png"
onmouseenter="btn04.src='imagenes/btn04Hover.png'"
onmouseleave="btn04.src='imagenes/btn04.png'"
onclick="Sintonizar('4')">
<img id="btn05" src="imagenes/btn05.png"
onmouseenter="btn05.src='imagenes/btn05Hover.png'"
onmouseleave="btn05.src='imagenes/btn05.png'"
onclick="Sintonizar('5')">
</div>
<div id="control" style="position:absolute; left:7; top:8;">
<img id="btnPrincipal" src="imagenes/play.png" alt="Reproducir"
onmousedown="btnPrincipal.src='imagenes/playDown.png'"
onmouseup="btnPrincipal.src='imagenes/playHover.png'"
onmouseenter="btnPrincipal.src='imagenes/playHover.png'"
onmouseleave="btnPrincipal.src='imagenes/play.png'"
onclick="RadioPlay()">
</div>
<div id="volumenMas" style="position:absolute; right:9; top:7;">
<img id="btn" src="imagenes/Mas.png" alt="Volumen (+)"
onclick="MasVolumen()">
</div>
<div id="volumenMenos" style="position:absolute; right:9; top:25;">
<img id="btn" src="imagenes/Menos.png" alt="Volumen (-)"
onclick="MenosVolumen()">
</div>
<div id="texto" style="position:absolute; right:12; top:49; font-size:12;">
Listo
</div>
</div>
<html>
<head>
<style>
body
width:350;
height:320;
</style>
<script>
function init()
for(i = 1; i <= 5; i = i + 1)
if(System.Gadget.Settings.read(texto) != "")
cboRadio.options[i-1].text =
System.Gadget.Settings.read(texto);
else
cboRadio.options[i-1].text = "Favorito " + i.toString();
cboRadio.options[i-1].value = System.Gadget.Settings.read(texto);
CambioSeleccion();
function CambioSeleccion()
txtNombreRadio.value = cboRadio.options[cboRadio.selectedIndex].text;
txtMMSRadio.value = cboRadio.options[cboRadio.selectedIndex].value;
txtImagen.value = System.Gadget.Settings.read("Imagen_" +
indice.toString());
function Guardar()
System.Gadget.Settings.write("NombreRadio_" + indice.toString(),
txtNombreRadio.value);
System.Gadget.Settings.write("MMS_" + indice.toString(),
txtMMSRadio.value);
init();
cboRadio.selectedIndex = indice - 1;
function SeleccionarImagen()
if(oShellItem)
txtImagen.value = oShellItem.path;
//Aquí, especifico que método se usara para el evento onSettingsClosing, osea, justo
antes que se cierre la ventana de configuración.
System.Gadget.onSettingsClosing = SettingsClosing;
function SettingsClosing(event)
if (event.closeAction == event.Action.commit)
event.cancel = false;
</script>
</head>
<body onload="init()">
.Seleccione radio:<br>
<option value="">
<option value="">
<option value="">
<option value="">
<option value="">
</select>
</span>
.Estación:
</div>
.URL:
</div>
.Imagen:
<div>
id="btnSeleccionar" value="...">
</div>
</div>
<a href="http://www.windowsmedia.com/radiotuner/Myradio.asp">
style="position:absolute; top:-8;"
</a>
</div>
</div>
</body>
</html>
Body
width:135px;
height:100px;
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-image:url('../imagenes/fondo.png');
Colocamos los iconos e imágenes que vienen con este Paso a Paso (o podemos
cambiarlas por otras) en una de las subcarpetas que creamos en el punto 3 (imágenes).
window.onload = function()
{
System.Gadget.onSettingsClosed = SettingsClosed;
System.Gadget.settingsUI = "Settings.html";
function SettingsClosed()
btn01.alt = System.Gadget.Settings.read("NombreRadio_1");
btn02.alt = System.Gadget.Settings.read("NombreRadio_2");
btn03.alt = System.Gadget.Settings.read("NombreRadio_3");
btn04.alt = System.Gadget.Settings.read("NombreRadio_4");
btn05.alt = System.Gadget.Settings.read("NombreRadio_5");
function RadioPlay()
if(mmsRadioActual != "")
btnPrincipal.src = "imagenes/stop.png";
btnPrincipal.alt = "Detener";
btnPrincipal.onmousedown =
function(){btnPrincipal.src="imagenes/stopDown.png"};
btnPrincipal.onmouseup =
function(){btnPrincipal.src="imagenes/stopHover.png"};
btnPrincipal.onmouseenter =
function(){btnPrincipal.src="imagenes/stopHover.png"};
btnPrincipal.onmouseleave =
function(){btnPrincipal.src="imagenes/stop.png"};
btnPrincipal.onclick = function(){RadioStop()};
mPlayer.url = mmsRadioActual;
mPlayer.controls.Play();
else
function RadioStop()
btnPrincipal.src = "imagenes/play.png";
btnPrincipal.alt = "Reproducir";
btnPrincipal.onmousedown = function(){btnPrincipal.src="imagenes/playDown.png"};
btnPrincipal.onmouseup = function(){btnPrincipal.src="imagenes/playHover.png"};
btnPrincipal.onmouseenter = function(){btnPrincipal.src="imagenes/playHover.png"};
btnPrincipal.onmouseleave = function(){btnPrincipal.src="imagenes/play.png"};
btnPrincipal.onclick = function(){RadioPlay()};
fondoDinamico.src = "../imagenes/fondo.png";
mPlayer.controls.Stop();
function Sintonizar(numFavorito)
RadioStop();
switch(numFavorito)
case('1'):
btn01.src = "imagenes/btn01Hover.png";
btn01.onmouseleave =
function(){btn01.src="imagenes/btn01Hover.png"};
btn02.src = "imagenes/btn02.png";
btn02.onmouseleave = function(){btn02.src="imagenes/btn02.png"};
btn03.src = "imagenes/btn03.png";
btn03.onmouseleave = function(){btn03.src="imagenes/btn03.png"};
btn04.src = "imagenes/btn04.png";
btn04.onmouseleave = function(){btn04.src="imagenes/btn04.png"};
btn05.src = "imagenes/btn05.png";
btn05.onmouseleave = function(){btn05.src="imagenes/btn05.png"};
break;
case('2'):
btn01.src = "imagenes/btn01.png";
btn01.onmouseleave = function(){btn01.src="imagenes/btn01.png"};
btn02.src = "imagenes/btn02Hover.png";
btn02.onmouseleave =
function(){btn02.src="imagenes/btn02Hover.png"};
btn03.src = "imagenes/btn03.png";
btn03.onmouseleave = function(){btn03.src="imagenes/btn03.png"};
btn04.src = "imagenes/btn04.png";
btn04.onmouseleave = function(){btn04.src="imagenes/btn04.png"};
btn05.src = "imagenes/btn05.png";
btn05.onmouseleave = function(){btn05.src="imagenes/btn05.png"};
break;
case('3'):
btn01.src = "imagenes/btn01.png";
btn01.onmouseleave = function(){btn01.src="imagenes/btn01.png"};
btn02.src = "imagenes/btn02.png";
btn02.onmouseleave = function(){btn02.src="imagenes/btn02.png"};
btn03.src = "imagenes/btn03Hover.png";
btn03.onmouseleave =
function(){btn03.src="imagenes/btn03Hover.png"};
btn04.src = "imagenes/btn04.png";
btn04.onmouseleave = function(){btn04.src="imagenes/btn04.png"};
btn05.src = "imagenes/btn05.png";
btn05.onmouseleave = function(){btn05.src="imagenes/btn05.png"};
break;
case('4'):
btn01.src = "imagenes/btn01.png";
btn01.onmouseleave = function(){btn01.src="imagenes/btn01.png"};
btn02.src = "imagenes/btn02.png";
btn02.onmouseleave = function(){btn02.src="imagenes/btn02.png"};
btn03.src = "imagenes/btn03.png";
btn03.onmouseleave = function(){btn03.src="imagenes/btn03.png"};
btn04.src = "imagenes/btn04Hover.png";
btn04.onmouseleave =
function(){btn04.src="imagenes/btn04Hover.png"};
btn05.src = "imagenes/btn05.png";
btn05.onmouseleave = function(){btn05.src="imagenes/btn05.png"};
break;
case('5'):
btn01.src = "imagenes/btn01.png";
btn01.onmouseleave = function(){btn01.src="imagenes/btn01.png"};
btn02.src = "imagenes/btn02.png";
btn02.onmouseleave = function(){btn03.src="imagenes/btn02.png"};
btn03.src = "imagenes/btn03.png";
btn03.onmouseleave = function(){btn03.src="imagenes/btn03.png"};
btn04.src = "imagenes/btn04.png";
btn04.onmouseleave = function(){btn04.src="imagenes/btn04.png"};
btn05.src = "imagenes/btn05Hover.png";
btn05.onmouseleave =
function(){btn05.src="imagenes/btn05Hover.png"};
break;
}
nombreRadioActual = System.Gadget.Settings.read("NombreRadio_" + numFavorito);
if(mmsRadioActual == "")
nombreRadioActual = "";
texto.innerHTML = "(disponible)";
else
texto.innerHTML = nombreRadioActual;
fondoDinamico.src = imagenActual;
function MasVolumen()
now_vol = mPlayer.settings.volume;
mPlayer.settings.volume = now_vol;
function MenosVolumen()
now_vol = mPlayer.settings.volume;
mPlayer.settings.volume = now_vol;
//Evento del control de Windows Media que se ejecuta cada vez que se cambia el estado de
este.
function CambioEstado(newstate)
{
switch (newstate)
case 1: //Stopped
texto.innerHTML = "Detenido";
break;
case 2: //Paused
texto.innerHTML = "Pausado";
break;
case 3: //Playing
texto.innerHTML = nombreRadioActual;
break;
case 6: //Buffering
texto.innerHTML = "Almacenando...";
break;
case 7: //Waiting
texto.innerHTML = "Espere...";
break;
texto.innerHTML = "Fin";
break;
case 9: //Transitioning
texto.innerHTML = "Conectando...";
break;
texto.innerHTML = "Listo";
break;
}
Paso 5: Probar, Depurar e Instalar el Gadget en Windows Sidebar
Ya tenemos el Gadget terminado y listo para instalar! Para poder verlo en funcionamiento,
una vez agregado a Windows Sidebar, simplemente hacemos clic derecho sobre éste y
seleccionamos Options. Se abrirá una ventana que contiene el archivo settings.html
creado en el punto 3 (Crear la pantalla de Configuración del Gadget) para que carguemos
nuestras radios favoritas.
REFERENCIAS
9 Windows Sidebar Reference