Erstellen von Gadgets – Teil 1

Windows Vista

Der folgende Artikel basiert auf einer Vorabversion des Microsoft-Betriebssystems Windows Vista. Das bedeutet, dass die in diesem Artikel beschriebenen Features nicht endgültig sein müssen: einige werden im fertigen Produkt aus vertrieblichen, technischen oder anderen Gründen möglicherweise nicht enthalten sein. Wir werden diesen Artikel im Falle einer solchen Änderung aktualisieren.

Auf dieser Seite

And the Winner Is …
Eine (sehr) kurze Einführung in Microsoft Gadgets
Erstellen eines ersten Gadgets
Der Gadgetsordner
Die Manifestdatei
Die HTML-Datei
Anzeigen von Daten in einem <SPAN>
Erstellen eines automatisch ausgeführten Gadgets
Erstellen eines automatisch aktualisierten Gadgets
Ein Ausblick auf kommende Themen

And the Winner Is …

Jedes Jahr wird mindestens ein Film für ein halbes Dutzend oder mehr Academy Awards nominiert, einschließlich der bedeutendsten: "Bester Film", "Bester Regisseur", "Bester Schauspieler", "Beste Schauspielerin". Das ist großartig, nur dass die wichtigsten Personen in der Oscar-Nacht häufig im Publikum sitzen, ein Lächeln vorgeben und freundlich klatschen, während ein anderer Film alle wichtigen Preise abräumt. "Bester Film" oder "Bester Regisseur"? Leider nicht, aber wir haben die Preise "Bester Ton" und "Beste Ausstattung" bekommen.

Wie … nett ….

Skriptentwickler kennen dieses Gefühl nur zu gut. Immer wenn ein neues Betriebssystem veröffentlicht wird, hoffen die Skriptentwickler mit geschlossenen Augen und gekreuzten Fingern, dass dieses Mal eine der Hauptneuerungen ihnen gilt. Und bei jedem neuen Betriebssystem werden die Skriptentwickler enttäuscht. Sicher, es gibt immer neue WMI-(Windows Management Instrumentation-)Klassen und eine handvoll neuer COM-Objekte zum Spielen, und das ist großartig: je mehr Neuigkeiten, desto besser. Leider sind ein paar neue WMI-Klassen so wie der Gewinn des Preises "Bester Ton": Obwohl Sie froh sind, überhaupt etwas gewonnen zu haben, sind Sie doch neidisch auf die wirklich coolen Sachen, die andere erhalten haben. Sie möchten nur einmal der große Gewinner sein, nur einmal die absolute Innovation erhalten. "Bester Ton" ist großartig, aber nur einmal "Bester Film" oder "Bester Regisseur".

Sie wissen es vielleicht nicht, aber als Skriptentwickler warten Sie bereits Ihr ganzes Leben auf Windows Vista.

Eine (sehr) kurze Einführung in Microsoft Gadgets

Sie haben richtig gehört. Windows Vista bietet alle möglichen Neuigkeiten, und eines der coolsten und am meisten erwarteten Features – die Windows Sidebar – ist tatsächlich für Skriptentwickler gedacht. Die Windows Sidebar ist ein für "Gadgets" reservierter Bildschirmbereich, ähnlich der Schnellstartleiste für Verknüpfungen. Gadgets sind Minianwendungen, kleine Codeschnipsel, die alle Aufgaben erledigen, die sich ein Gadgetautor vorstellen kann. Windows Vista enthält bereits einige Gadgets, einschließlich einem sehr einfachen kleinen Taschenrechner und einigen Gadgets für das Überwachen von RSS-Feeds. Rund um Gadgets entsteht bereits eine neue Community. Weitere Informationen (sowie Gadgets von Communitymitgliedern zum Herunterladen) finden Sie auf der Website Microsoft Gadgets (in englischer Sprache). Sie müssen nicht sehr lange die Gadgetgalerie untersuchen, um zu merken, wie cool (und hilfreich) Gadgets sein können.

Aber seien wir einmal ehrlich: Die Welt ist voll von coolen Dingen, die andere Leute erstellen können. Gadgets sind so interessant, weil diese neue Technologie für Menschen entwickelt wurde, die Skripts schreiben. Verstehen Sie uns nicht falsch: Gadgets sind cool, Gadgets sind schick und Gadgets können komplexe Aufgaben ausführen. Und trotzdem sind Gadgets unter der Oberfläche nichts anderes als HTML-Seiten im Kleinformat. Erstellen Sie eine einfache HTML-Seite, mischen Sie ein wenig VBScript-Code (einschließlich WMI-Code) unter, geben Sie ein wenig vom Gadget-Objektmodell (wird in Teil II dieser Serie beschrieben) hinzu, und Sie haben ein Gadget. Gadgets sind eines der neuen Features von Windows Vista, und Skriptentwickler sind diejenigen, die diese Gadgets erstellen.

Das ist eine sehr gute Idee. Vielleicht sollten wir weniger reden und stattdessen handeln, wir helfen Ihnen beim Erstellen Ihres ersten Gadgets.

Erstellen eines ersten Gadgets

Microsoft wurde häufig dafür kritisiert (ja, Sie können es glauben oder nicht, einige Leute haben Microsoft in der Vergangenheit kritisiert), dass viele unserer Produkte für die Verwendung durch Roboter oder Außerirdische vom Planeten Omicron IV entwickelt wurden, aber auf keinen Fall für Menschen. Zum Glück gilt das nicht für Microsoft Gadgets. (Obwohl Sie auch, wenn Sie ein Roboter oder ein Außerirdischer vom Planeten Omicron IV sind, sehr leicht Gadgets erstellen können.) Zum Erstellen von Gadgets benötigen Sie nur zwei Dinge:

  • Eine Manifestdatei mit der Bezeichnung Gadget.xml. Dieses Manifest enthält alle Einstellungen für das Gadget, einschließlich des Gadgetnamens, des Autors und der Urheberrechtsinformationen sowie Information über die HTML-Seite, aus der das eigentliche Gadget besteht.

  • Eine HTML-Datei (z. B. Test.htm). Obwohl sie vielleicht nicht so aussehen, aber Gadgets sind nichts anderes als HTML-Dateien: Sie erstellen einfach eine HTML-Datei, fügen die entsprechenden Tags und den Skriptcode ein und haben ein eigenes Gadget.

Hinweis. Ja, wir wissen Bescheid: Sie haben keine Ahnung, was wir mit "entsprechenden Tags und Skriptcode" meinen. Aber seien Sie beruhigt, genau darum geht es im Rest dieses Artikels.

Dies sind die einzigen Dinge, die Sie zum Erstellen eines Gadgets benötigen. Natürlich werden Sie, wenn Sie komplexere Gadgets erstellen, mit Symboldateien, Bilddateien, Einstellungsdateien und anderen Elementen arbeiten. Aber dazu kommen wir später.

Sehen Sie, wie einfach das ist? Was meinen Sie mit: "Sicher, bis dahin"? Richtige Idee: Dies wäre der Zeitpunkt, an dem Sie einen wahnsinnig komplizierten Kompilierungsvorgang starten, für den Sie wahrscheinlich einen proprietären Compiler benötigen, den Ihnen die Scripting Guys für nur 39,95 € plus Versand und Bearbeitungsgebühren verkaufen. (Wo Sie das gerade erwähnen wünschten wir, wir hätten daran gedacht.) Aber anstelle eines proprietären Compilers erhalten Sie nun die Anleitung, wie Sie alle Ihre Dateien zusammensammeln und sie in ein Gadget "kompilieren":

  1. Speichern Sie alle Dateien in einem Gadgetsordner.

Das war´s schon: Speichern Sie alle Dateien in einem Ordner, und fertig ist Ihr Gadget. Keine Kompilierung, keine Compiler, keine komplexen oder technischen Anweisungen, sondern einfach nur alle Dateien in einen bestimmten Ordner kopieren.

Wenn Sie uns trotzdem 39,95 € zukommen lassen wollen, würden wir das Geld natürlich gerne nehmen.

Der Gadgetsordner

Natürlich gibt es da einen kleinen Haken: Sie können Ihre Dateien nicht einfach in irgendeinen Ordner kopieren. Sie müssen stattdessen die folgende Vorgehensweise beachten:

Öffnen Sie zunächst den Gadgetsordner. Den schnellsten Zugriff auf den Gadgetsordner erhalten Sie, wenn Sie Folgendes im Dialogfeld Run (Ausführen) eingeben:

%userprofile%\appdata\local\microsoft\windows sidebar\gadgets

Hinweis. Sie finden den Befehl Run (Ausführen) nicht im Startmenü? Oh, stimmt ja: Aus irgendeinem Grund ist dieser Befehl in der Standardeinstellung ausgeblendet. Das ist aber kein Problem. Um den Befehl Run (Ausführen) wieder anzuzeigen, klicken Sie mit der rechten Maustaste auf die Schaltfläche Start, und klicken Sie dann auf Properties (Eigenschaften). Klicken Sie im Dialogfeld Taskbar and Start Menu Properties (Eigenschaften von Taskleiste und Startmenü) auf der Registerkarte Start Menu (Startmenü) auf Customize (Anpassen).

Sind Sie noch da? Gut. Führen Sie im Dialogfeld Customize Start Menu (Startmenü anpassen) einen Bildlauf nach unten durch, und aktivieren Sie das Kontrollkästchen Run command (Befehl "Ausführen"). Klicken Sie einige Male auf OK, anschließend wird der Befehl Run (Ausführen) wieder angezeigt.

Und richtig, die Scripting Guys verlangen für diese Art von Insiderwissen normalerweise 39,95 €. Von uns erhalten Sie die Information umsonst.

Erstellen Sie im Gadgetsordner einen neuen Ordner. Geben Sie dem Ordner einen beliebigen Namen, der aber mit der Dateinamenerweiterung .gadget enden muss (z. B. Test.gadget). Es stellt natürlich eine erhebliche Erleichterung dar, wenn der Name des Ordners in irgendeinem Zusammenhang mit dem darin enthaltenen Gadget steht. Das Betriebssystem verwendet diesen Ordner allerdings lediglich dazu, die zu einem Gadget gehörenden Dateien zu bestimmen. Der Gadgetname wird aus den Informationen im Manifest abgeleitet, nicht aus dem Ordnernamen (wie die Scripting Guys in harter Arbeit herausgefunden haben).

Sie müssen nun lediglich alle Dateien (z. B. Gadget.xml und Test.htm) in diesen Ordner kopieren. Verfügen Sie nun schon über ein Microsoft Gadget? Aber sicher. Wenn die Windows Sidebar ausgeführt wird, klicken Sie auf die Schaltfläche +, um die auf dem Computer gefundenen Gadgets anzuzeigen. Ihr Gadget wird nun im Dialogfeld zum Auswählen von Gadgets angezeigt.

Hinweis. Was ist das? Sie können auch die Windows Sidebar nicht finden? Das ist in Ordnung. Wenn Sie die Windows Sidebar nicht finden, führen Sie die folgenden Schritte aus: Klicken Sie im Menü Start auf All Programs (Alle Programme). Klicken Sie auf Accessories (Zubehör). Nun sollte eine Verknüpfung zur Sidebar angezeigt werden.

Installieren eines Gadgets

Wenn Ihr Gadget tatsächlich in der Liste der verfügbaren Gadgets angezeigt wird, können Sie es installieren, indem Sie das Symbol einfach auf die Windows Sidebar ziehen und die Maustaste dann loslassen. (Sie können auch mit der rechten Maustaste auf das Gadgetsymbol und anschließend auf Add (Hinzufügen) klicken.) Das Gadget wird angezeigt, und Sie können es verwenden. Wenn Sie das Gadget von der Sidebar entfernen möchten, bewegen Sie den Mauszeiger darüber, und klicken Sie dann auf das in der oberen rechten Ecke angezeigte X. Wenn Sie nicht genau wissen, welches kleine X wir meinen, schauen Sie einmal auf diese Abbildung:

Microsoft Gadgets

Die Manifestdatei

Wie wir bereits erwähnt haben, benötigen Sie zum Erstellen eines Gadgets nur zwei Dinge: eine Manifestdatei und eine HTML-Datei. Wir wissen genau, was Sie denken: "Klar, auf Omicron IV verwendet ihr bestimmt die ganze Zeit Manifestdateien." (Einige von uns ja, andere nicht.) Was wissen aber Systemadministratoren über Manifestdateien?

Was Sie wissen (oder zumindest jetzt erfahren) ist, dass "Manifestdatei" ein extrem technischer Begriff ist, der eigentlich nichts anderes als eine INI-Datei darstellt, also eine einfache Textdatei (in diesem Fall in XML) mit Konfigurationsinformationen zum Gadget. Zugegeben, die Vorstellung, etwas in XML schreiben zu müssen, lässt Sie vielleicht erschauern. Aber keine Sorge, das ist die einfachste XML-Datei, mit der Sie je gearbeitet haben.

Hier sehen Sie, was wir meinen:

<?xml version="1.0" encoding="utf-8" ?>

<gadget>
    <name>My First Gadget</name>
    <author>The Microsoft Scripting Guys</author>
    <copyright>2006 Microsoft Corporation</copyright>
    <description>Sample gadget that returns the name of the installed operating system.</description>
    <icons>
        <icon>icon.png</icon>
    </icons>
    <version value="1.0.0.0" MinPlatformVersion="0.1"></version>
    <sidebar>
        <type>html</type>
        <permissions>full</permissions>
        <code>test.htm</code>
        <website>www.microsoft.com/technet/scriptcenter</website>
     </sidebar>
</gadget>

Bevor Sie fragen: Ja, Sie können einfach diese Datei kopieren und fast in identischer Form verwenden. Sie müssen (bei Bedarf) lediglich einige Tagwerte anpassen. (Vergessen Sie nicht, dass Sie die Datei Gadget.xml nennen müssen.) Die Tags, die Sie evtl. ändern müssen/möchten, werden in der folgenden Tabelle beschrieben:

Tag

Beschreibung

<name>

Name des Gadgets, der im Dialogfeld zur Gadgetauswahl angezeigt wird.

<author>

Name der Person, die das Gadget geschrieben hat. Die Tags <author>, <copyright> und <description> werden bei der Gadgetauswahl angezeigt, wenn Sie auf ein bestimmtes Gadget klicken. Einzelheiten finden Sie in der Abbildung unten.

<copyright>

Urheberrechtsinformationen, einschließlich Name des Urheberrechtsinhabers und des Urheberrechtsdatums.

<description>

Kurzbeschreibung des Gadgets und seiner Funktion.

<icon>

Name der Symboldatei (das Symbol ist das Bild, das in der Gadgetauswahl angezeigt wird). Weitere Informationen über Symbole finden Sie unter Erstellen eines Symbols im folgenden Unterabschnitt dieses Dokuments.

<code>

Wahrscheinlich nicht der aussagekräftigste Tagname der Welt, aber dies ist der Name der HTML-Datei, aus der das Gadget besteht.

<website>

Website zum Gadget.

Um das alles etwas zu verdeutlichen, finden Sie hier eine Zuordnung der Elemente der Manifestdatei zu den Elementen, die im Dialogfeld zur Gadgetauswahl angezeigt werden:

Microsoft Gadgets

Erstellen eines Symbols

Sie entscheiden selbst, ob Sie ein benutzerdefiniertes Symbol für Ihr Gadget verwendet wollen. Wenn Sie kein Symbol bereitstellen (oder in der Manifestdatei keines angeben), wird in der Gadgetauswahl ein Standardsymbol angezeigt. (Ohne zusätzliche Kosten für Sie.)

Wenn Sie ein benutzerdefiniertes Symbol verwenden möchten, sollten Sie auch hier beachten, dass "Symbol" nur ein Name für eine herkömmliche Bilddatei ist, also keine Windows-Symbole, die mit einer bestimmten Software erstellt werden müssen. Stattdessen ist ein Symbol eine Bilddatei mit der Erweiterung .GIF, .JPG oder .PNG. Bei den Beispielgadgets von Windows Vista werden ausschließlich PNG-Bilder verwendet. Der Grund ist möglicherweise, dass PNG-Bilder transparente Hintergründe zulassen, wodurch ansprechende Bilder möglich werden. (Wir setzen Ihr entsprechendes künstlerisches Talent voraus.) Sie müssen die Symbole aber nicht als PNG-Dateien speichern. Starten Sie stattdessen einfach Paint, erstellen Sie ein Symbol, und speichern Sie es als JPG-Datei. Ihr Symbol wird ganz normal in der Gadgetauswahl angezeigt.

Gute Frage: Welche Größe sollte das Symbol aufweisen? Die optimale Größe ist 64 x 64 Pixel. Die Symbolgröße wird von der Gadgetauswahl angepasst, aber wenn Sie direkt ein Symbol im Format 64 x 64 Pixel verwenden, vermeiden Sie Bildverzerrungen bei einer notwendigen Verkleinerung oder Vergrößerung.

Hier ist das Symbol, das wir für diesen Artikel verwenden:

Microsoft Gadgets

Wir mögen es auch.

Hinweis. Ihnen ist vielleicht aufgefallen, dass das <ICON>-Tag von einem <ICONS>-Tag eingeschlossen ist:

<icons>
    <icon>icon.png</icon>
</icons>

Bedeutet das, dass Sie der Manifestdatei weitere Symbole hinzufügen können? Wahrscheinlich schon, aber ehrlich gesagt fragen wir uns, wozu Sie diese zusätzlichen Symbole verwenden würden. Das ist etwas, das wir noch herausfinden werden.

Die HTML-Datei

Die das Gadget ausmachende HTML-Datei unterscheidet sich eigentlich kaum von herkömmlichen Webseiten, auf denen dynamisches HTML verwendet wird. Verwenden Sie zum Erstellen der HTML-Datei tatsächlich einfach beliebige gültige HTML-Tags (einschließlich CSS-Format) und Skriptcode. Wir zeigen Ihnen gleich eine HTML-Beispielseite. Vorher müssen wir aber noch kurz darauf eingehen, wie Sie WMI-Code in ein Gadget einfügen.

Verwenden von WMI

Als Systemadministrator schreiben Sie häufig Skripte, in denen viel WMI verwendet wird. Das ist verständlich, denn mit WMI können Sie sämtliche Geräte steuern, von Druckern über Festplattenlaufwerke bis zu Mäusen und Monitoren. Und das beste daran ist, dass WMI ganz einfach zu verwenden ist. Angenommen, Sie möchten beispielsweise den Namen des auf dem lokalen Computer installierten Betriebssystems ermitteln. Kein Problem, hier sehen Sie ein WMI-Skript, dass Ihnen diese Information liefert:

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")

For Each objItem in colItems
    Msgbox objItem.Caption
Next

Wenn Sie Gadgets für die Systemverwaltung erstellen möchten, müssen wir Ihnen leider folgende schlechte Mitteilung machen: Die WMI-Skripts, die Sie bisher geschrieben haben, funktionieren in Gadgets nicht. (Warten Sie, machen Sie nichts Unüberlegtes: Die Nachrichten werden gleich besser, versprochen.) Der Grund ist, dass ein Gadget nichts anderes ist als eine Webseite, und Webseiten dürfen aus Sicherheitsgründen nicht GetObject verwenden. Wenn Sie den vorhergehenden Code in ein Gadget einfügen, erhalten Sie die folgende Fehlermeldung:

ActiveX component can’t create object: 'GetObject'

Oh, oh.

Aber keine Panik. Sie können WMI-Skripts trotzdem in Gadgets verwenden, Sie dürfen nur nicht GetObject und den Moniker winmgmts verwenden. Erstellen Sie stattdessen mit CreateObject eine Instanz des WbemScripting.SWbemLocator-Objekts, und stellen Sie dann mit der ConnectServer-Methode eine Verbindung zum WMI-Dienst her. Mit anderen Worten, Sie müssen ein Skript schreiben, das dem folgenden ähnelt:

strComputer = "."

Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(strComputer, "root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")

For Each objItem in colItems
    Msgbox objItem.Caption
Next

Alles klar? Wie gesagt, Sie müssen nicht in Panik ausbrechen. (Obwohl wir der Fairness halber zugeben müssen, dass es wahrscheinlich unsere Schuld war, dass Sie zunächst Panik hatten.) Der einzige Unterschied zwischen einem Skript, das den WMI-Moniker verwendet, und einem Skript mit ConnectServer wird deutlich, wenn Sie die Verbindung zum WMI-Dienst herstellen. Sie haben diese Verbindung bisher mit einer einzigen Codezeile hergestellt:

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Nun müssen Sie zwei Zeilen schreiben, um die Verbindung herzustellen (Ja, das bedeutet eine Verdoppelung Ihres Arbeitsaufwands!): Sie erstellen eine Instanz des WbemScripting.SWbemLocator-Objekts, und stellen dann mit der ConnectServer-Methode die Bindung zum WMI-Dienst her. Beachten Sie, dass wir zwei Parameter an ConnectServer übergeben, den Namen des Computers, zu dem eine Verbindung hergestellt werden soll (dargestellt durch die strComputer-Variable), und den WMI-Namespace, zu dem die Verbindung erfolgen soll (in diesem Fall root\cimv2):

Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(strComputer, "root\cimv2")

Haben Sie das alles verstanden? Gut. Kehren wir nun zum eigentlichen Artikel zurück.

Erstellen einer HTML-Datei

Wie bereits erwähnt, ist ein Gadget lediglich eine HTML-Datei. Das bedeutet, dass alle Elemente (einschließlich dynamischer Elemente), die Sie in einer HTML-Seite verwenden können, auch in einem Gadget verwendet werden können. Wie Sie wahrscheinlich bereits herausgefunden haben, gehört dazu auch VBScript-Code, obwohl in den meisten auf der Microsoft Gadgets-Website verfügbaren Gadgets JScript oder JavaScript verwendet wird. VBScript funktioniert aber hervorragend (wie Sie bald feststellen werden).

Wir haben Ihnen bereits ein WMI-Skript gezeigt, das den Namen des auf dem lokalen Computer installierten Betriebssystems zurückgibt. Lassen Sie uns nun versuchen, dieses Skript in ein Gadget umzuwandeln. Wir beginnen ganz einfach, indem wir ein Gadget erstellen, das aus einer Schaltfläche besteht. Nach dem Klicken auf diese Schaltfläche wird der Wert der Caption-Eigenschaft des Betriebssystems in einem Meldungsfeld angezeigt. Hier sehen Sie den HTML-Code für das Gadget:

<html>

<head>
    <title>My First Gadget</title>

    <style>
        body{width:120;height:160}
    </style>

</head>

<script language="VBScript">

    Sub RunSub
        strComputer = "."

        Set objLocator = CreateObject("WbemScripting.SwbemLocator")
        Set objWMIService = objLocator.ConnectServer(strComputer, "root\cimv2")

        Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")

        For Each objItem in colItems
            Msgbox objItem.Caption
        Next
    End Sub

</script>

<body>
    <input type="button" value="Run" name="run_button" onClick="RunSub">
</body>

</html>

Wie Sie sehen, ist an diesem Code überhaupt kein "Schnickschnack". Dieser einfache HTML-Code führt nicht viel mehr aus, als eine einzelne Schaltfläche auf einer Seite anzuzeigen. Beim Klicken auf diese Schaltfläche wird die Unterroutine RunSub ausgeführt, die dann mithilfe von WMI den Namen des auf dem Computer installierten Betriebssystems ermittelt.

Hinweis. OK, für einige Leute mag das einfacher HTML-Code sein, aber vielleicht haben Sie gar keine HTML-Kenntnisse. In diesem Fall sollten Sie einen Blick in unser zweiteiliges HTA-Tutorial werfen. Dort erhalten Sie Hilfe zu Themen wie <SCRIPT>- und <INPUT>-Tags.

Das einzige Element, dass wir hier gesondert erwähnen müssen, ist das <STYLE>-Tag. Wenn wir komplexere Gadgets erstellen, werden wir das <STYLE>-Tag noch genauer beschreiben, im Moment ist es ausreichend zu wissen, dass Sie mit diesem Tag die Standardhöhe und -breite des Gadgets konfigurieren:

<style>
    body{width:120;height:160}
</style>

Mit diesem Tag geben Sie einfach nur an, dass das Gadget 120 Pixel breit (die Windows Sidebar ist ungefähr 130 Pixel breit) und 160 Pixel hoch ist. Wenn für dieses spezielle Gadget 160 Pixel zu hoch sind, weisen Sie der height-Eigenschaft einfach einen anderen Wert zu:

<style>
    body{width:120;height:40}
</style>

Wenn Sie dieses Gadget installieren, wird es folgendermaßen in der Windows Sidebar angezeigt:

Microsoft Gadgets

Und hier sehen Sie, was passiert, wenn Sie auf die Schaltfläche klicken:

Microsoft Gadgets

Nun können Sie Ihrer Mutter schreiben, was für ein tolles Gadget Sie gerade erstellt haben. Wenn Sie damit fertig sind, können wir ja weiter machen.

Anzeigen von Daten in einem <SPAN>

Bis jetzt haben wir ein Gadget erstellt, das beim Anklicken den Namen des Betriebssystems in einem Meldungsfeld anzeigt. Das ist nicht verkehrt, denn es wird sicherlich Situationen geben, in denen ein Gadget so viele Informationen zurückgibt, dass Sie diese Informationen in einem Meldungsfeld, einem Internet Explorer-Fenster oder an einer anderen Stelle anzeigen möchten.

Andererseits werden Sie früher oder später Gadgets erstellen, bei denen die Anzeige der Informationen in einem Meldungsfeld nicht sinnvoll ist und sie nicht erst nach dem Klicken auf eine Schaltfläche angezeigt werden sollen. Angenommen, Sie möchten beispielsweise eine Uhr für die Windows Sidebar erstellen. Das ist eine gute Idee, aber möchten Sie wirklich erst auf eine Schaltfläche klicken müssen, um die Uhrzeit herauszufinden? Und wenn Sie auf die Schaltfläche klicken, soll die Uhrzeit dann in einem Meldungsfeld angezeigt werden? Sicher, auf Omicron IV mögen wir so etwas. Aber Menschen finden das meistens zu aufwendig, wenn nicht gar verrückt.

Wir müssen also Gadgets erstellen, die Folgendes können:

  • Anzeigen von Daten im Bereich des Gadgets selbst. Später werden Sie in dieser Serie noch erfahren, wie Sie diese Informationen grafisch darstellen, aber im Moment konzentrieren wir uns auf die textbasierte Anzeige.

  • Automatisches Abrufen der Daten ohne Benutzerinteraktion.

  • Regelmäßige Aktualisierung der Informationen. Ein Gadget, das z. B. den auf einem Computer verfügbaren Arbeitsspeicher überwacht (dieses Gadget erstellen wir bald), kann den verfügbaren Arbeitsspeicher nicht nur einfach beim Start abrufen und es dann dabei belassen. Es muss stattdessen regelmäßig den Speicherwert aktualisieren.

Das hört sich umfangreich an, aber wir werden es einfach machen, in dem wir uns schrittweise heranarbeiten. Beginnen wir mit einer Diskussion über das <SPAN>-Tag, das eine einfache Möglichkeit zur Anzeige von Informationen im Gadget selbst bietet.

Hier sehen Sie eine überarbeitete Version unserer HTML-Datei. Bei diesem neuen Gadget klicken Sie immer noch auf eine Schaltfläche, um die Unterroutine RunSub aufzurufen, aber diesmal wird der Name des Betriebssystems nicht in einem Meldungsfeld zurückgegeben, sondern im Gadget selbst:

<html>

<head>
    <title>My First Gadget</title>
    <style>
        body{width:120;height:160}
    </style>
</head>

<script language="VBScript">

    Sub RunSub
        strComputer = "."

        Set objLocator = CreateObject("WbemScripting.SwbemLocator")
        Set objWMIService = objLocator.ConnectServer(strComputer, "root\cimv2")

        Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")

        For Each objItem in colItems
            DataArea.InnerHTML = objItem.Caption
        Next
    End Sub

</script>

<body>
    <input type="button" value="Run" name="run_button" onClick="RunSub"><br>
    <span id="DataArea"></span>
</body>

</html>

Wenn wir in diesem Gadget auf die Schaltfläche klicken, werden die zurückgegebenen Informationen im Gadget selbst angezeigt:

Microsoft Gadgets

Cool.

Ein Extra-Bonus: Verschönern des Gadgethintergrunds

Wir werden in zukünftigen Artikeln dieser Serie noch genauer auf das Erstellen attraktiver Gadgets eingehen. An dieser Stelle möchten wir nur einige einfache Techniken beschreiben, mit denen Sie ein Gadget etwas verschönern können. Angenommen, Sie besitzen ein Bild, das sich Ihrer Meinung nach sehr gut als Hintergrund für ein Gadget eignet. In diesem Fall müssen Sie lediglich das background-Attribut des <BODY>-Tags Ihrer HTML-Datei festlegen. Durch diese Codezeile wird die Datei Background.jpg als Gadgethintergrund verwendet:

<body background = "background.jpg">

Sie müssen nur sicherstellen, dass die Datei Background.jpg im Gadgetsordner gespeichert ist.

Sie können auch ein Gadget mit einer anderen Hintergrundfarbe erstellen, indem Sie im <BODY>-Tag den bgcolor-Parameter hinzufügen. Sie wollten schon immer gerne ein Gadget mit einem knallroten Hintergrund haben? Warum nicht?

<body bgcolor = "red">

Sie können dem Gadget auch einen Farbverlauf als Hintergrund verleihen, indem Sie einen der Multimedia-Webfilter von Microsoft verwenden. In diesem Gadget haben wir das <BODY>-Format auf zwei Arten geändert:

  • Wir haben die Schriftfarbe auf Weiß, die Schriftart auf Arial und den Schriftgrad auf 8 Punkt festgelegt.

  • Und wir haben einen Farbverlaufsfilter hinzugefügt.

Hier sehen Sie den Code unseres geänderten Gadgets:

<html>

<head>
    <title>My Gadget</title>
    <style>
        body{width:120;height:160;font:8 pt Arial;color:white;
        filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr="#000000",
            EndColorStr="#0000FF")}
    </style>
</head>

<script language="VBScript">

    Sub RunSub
        strComputer = "."
        Set objLocator = CreateObject("WbemScripting.SwbemLocator")
        Set objWMIService = objLocator.ConnectServer(".", "root\cimv2")
        Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")
        For Each objItem in colItems
            DataArea.InnerHTML = objItem.Caption
        Next
    End Sub

</script>

<body>
    <input type="button" value="Run" name="run_button" onClick="RunSub"><P>
    <span id="DataArea"></span>
</body>

</html>

Und hier sehen Sie das Gadget selbst:

Microsoft Gadgets

Es ist keine künstlerische Höchstleistung, aber es ist besser als ein weißes Feld, das in der Sidebar aufpoppt.

Hinweis. Weitere Informationen zum Verwenden des Farbverlaufsfilters finden Sie im HTA Developer’s Center (in englischer Sprache).

Erstellen eines automatisch ausgeführten Gadgets

Das Anzeigen der Informationen innerhalb des Gadgets (also nicht mehr in einem Meldungsfeld) ist schon ein Schritt in die richtige Richtung und entspricht eher der Idee von Gadgets. Sie müssen aber immer noch auf eine Schaltfläche klicken, um diese Informationen abzurufen. Es muss aber einen Weg geben, diese Informationen automatisch abzurufen und anzuzeigen, wenn das Gadget geladen wird.

Natürlich gibt es die. Und natürlich kennen wir sie.

Hier sehen Sie ein Gadget, das automatisch den Namen des installierten Betriebssystems abruft und anzeigt, ohne dass ein Klick auf eine Schaltfläche erforderlich ist:

<html>

<head>
    <title>My First Gadget</title>
    <style>
        body{width:120;height:160}
    </style>
</head>

<script language="VBScript">

    Sub Window_OnLoad
        RunSub
    End Sub

    Sub RunSub
        strComputer = "."

        Set objLocator = CreateObject("WbemScripting.SwbemLocator")
        Set objWMIService = objLocator.ConnectServer(strComputer, "root\cimv2")

        Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")

        For Each objItem in colItems
            DataArea.InnerHTML = objItem.Caption
        Next
    End Sub

</script>

<body>
    <span id="DataArea"></span>
</body>

</html>

Wie Sie sehen, unterscheidet es sich nur wenig vom vorherigen Gadget. Tatsächlich gibt es nur zwei Unterschiede:

  • Wir haben die Schaltfläche aus dem Gadget entfernt. Das bedeutet, dass nicht mehr auf etwas geklickt werden muss (es gibt nichts mehr zum Klicken).

  • Wir haben die Unterroutine Window_OnLoad hinzugefügt.

Wie Sie wahrscheinlich bereits wissen, wird die Unterroutine Window_OnLoad immer dann ausgeführt, wenn die Webseite, auf der sie eingefügt wurde, geladen oder aktualisiert wird. Diese Unterroutine funktioniert auch in einem Gadget genau so: Sie wird automatisch ausgeführt, wenn das Gadget geladen wird. So haben wir ein automatisch ausgeführtes Gadget erstellt: Wir haben einfach eine Unterroutine mit der Bezeichnung Window_OnLoad erstellt und den Code, der beim Laden ausgeführt werden soll, in diese Unterroutine eingefügt.

Bei diesem Gadget enthält die Unterroutine Window_OnLoad Folgendes:

Sub Window_OnLoad
    RunSub
End Sub

Wie Sie sehen, rufen wir in dieser Unterroutine lediglich eine zweite Unterroutine auf: RunSub. Wir sollten darauf hinweisen, dass wir den WMI-Code nicht in eine separate Unterroutine einfügen müssen, sondern dass wir das WMI-Skript auch in die Unterroutine Window_OnLoad einfügen und den Code direkt beim Start ausführen können. Warum haben wir also diese überflüssige Unterroutine erstellt? Das ist relativ einfach: Das ermöglicht einen einfacheren Übergang zum nächsten Gadget.

Falls Sie sich wundern, hier sehen Sie unser schaltflächenloses Gadget:

Microsoft Gadgets

Erstellen eines automatisch aktualisierten Gadgets

Gadgets werden sicherlich sehr häufig als Überwachungsgeräte verwendet werden und dabei alles und jeden überwachen, vom freien Festplattenspeicherplatz bis zur Netzwerkverbindung und dem verfügbaren Arbeitsspeicher. Gadgets sind hervorragend für diese Aufgaben geeignet, denn: Sie sind klein und unauffällig und können trotzdem auf einen Blick wichtige Informationen bereitstellen. Mindestens genauso wichtig ist, dass Gadgets so programmiert werden können, dass Sie eine Aktion ausführen, wenn eine bestimmte Situation eintritt. Durch Kombination der kleinen Größe und der grafischen Möglichkeiten mit benutzerdefiniertem Skriptcode können Sie unglaublich hilfreiche Tools zum Überwachen des Netzwerks erstellen.

Natürlich hängt diese Fähigkeit davon ab, ob das Gadget diese Informationen permanent aktualisieren kann. Es ist wichtig, dass ein Gadget beim Start ein Pingsignal an einen Server senden und prüfen kann, ob dieser verfügbar ist. Als Überwachungstool ist ein Gadget allerdings nicht brauchbar, wenn es nur beim Start ein Pingsignal an den Server senden kann. Das Gadget muss sich vielmehr regelmäßig selbst aktualisieren: Es muss in regelmäßigen Abständen aktuelle Informationen abrufen. Das heißt, es muss ungefähr Folgendes ausführen:

<html>

<head>
    <title>My Gadget</title>
    <style>
        body{width:120;height:40"}
    </style>
</head>

<script language="VBScript">

    Sub Window_Onload
        GetMemory
        iTimerID = window.SetInterval("GetMemory", 10000)
    End Sub

    Sub GetMemory
        Set objLocator = CreateObject("WbemScripting.SwbemLocator")
        Set objWMIService = objLocator.ConnectServer(".", "root\cimv2")
        Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")
        For Each objItem in colItems
            DataArea.InnerHTML = objItem.FreePhysicalMemory
        Next
    End Sub

</script>

<body>
    <span id="DataArea"></span>
</body>

</html>

Bevor wir die Funktionsweise dieses Skripts beschreiben, sollten wir darauf hinweisen, dass dieses Skript nicht den Namen des auf dem Computer installierten Betriebssystems anzeigt, sondern stattdessen den verfügbaren Arbeitsspeicher auf dem Computer. Warum haben wir plötzlich das Betriebssystem-Gadget verworfen und stattdessen mit dem Gadget zum verfügbaren Arbeitsspeicher begonnen? Nun, wir gehen einfach einmal davon aus, dass Sie nicht ständig den Namen des installierten Betriebssystems überwachen müssen. Man kann mit ziemlicher Sicherheit davon ausgehen, dass sich der Name des Betriebssystems nicht so häufig ändert wie der verfügbare Arbeitsspeicher. Wir haben uns gedacht, dass das Überwachen des verfügbaren Arbeitsspeichers realistischer ist als das Überwachen des installierten Betriebssystems.

Die Unterroutine für das Ermitteln des aktuell verfügbaren Arbeitsspeichers (die Unterroutine GetMemory) wird im Folgenden dargestellt:

Sub GetMemory
    Set objLocator = CreateObject("WbemScripting.SwbemLocator")
    Set objWMIService = objLocator.ConnectServer(".", "root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")
    For Each objItem in colItems
        DataArea.InnerHTML = objItem.FreePhysicalMemory
    Next
End Sub

Was uns hier aber besonders interessiert, ist nicht die Unterroutine GetMemory, sondern die Unterroutine Window_OnLoad:

Sub Window_Onload
    GetMemory
    iTimerID = window.SetInterval("GetMemory", 10000)
End Sub

Wir führen in dieser Unterroutine also zwei Aktionen aus. Zunächst rufen wir die Unterroutine GetMemory auf, um sicherzustellen, dass beim Laden des Gadgets der verfügbare Arbeitsspeicher sofort abgerufen wird. Die zweite Aktion ist etwas interessanter:

iTimerID = window.SetInterval("GetMemory", 10000)

Wir verwenden in dieser Codezeile die SetInterval-Methode, um einen Zeitgeber zu erstellen. Dieser Zeitgeber weist das Gadget an, die Unterroutine GetMemory alle 10 Sekunden (10.000 Millisekunden) aufzurufen. Auf diese Weise aktualisiert sich das Gadget selbst. Alle 10 Sekunden ruft das Gadget die Unterroutine GetMemory auf, d. h., dass das Gadget alle 10 Sekunden mithilfe von WMI den aktuell verfügbaren Arbeitsspeicher abruft und im Gadget selbst anzeigt. Wenn 10 Sekunden zwischen zwei Messungen zu viel sind, ändern Sie den Parameterwert von 10000 auf eine kleinere Zahl. Wenn Sie den Parameterwert beispielsweise auf 5000 festlegen, aktualisiert sich das Gadget alle 5 Sekunden (5.000 Millisekunden). Ebenso können Sie eine größere Zahl verwenden, wenn die Messungen in größeren Intervallen erfolgen sollen.

Hier sehen Sie unser neues Gadget in Aktion:

Microsoft Gadgets

Wir haben nie behauptet, es sei künstlerisch wertvoll. Aber da wir nun die Grundlagen für das Erstellen von Gadgets kennen (speziell von Gadgets für Systemadministratoren), können wir schönere Gadgets erstellen. Wir werden in Kürze das Einfügen von Bildern in Gadgets beschreiben und außerdem das Gadget-Objektmodell sowie einige der wirklich tollen Dinge untersuchen, die Sie damit ausführen können.

Ein Ausblick auf kommende Themen

Um Ihnen eine Vorschau darauf zu geben, was Gadgets alles leisten können, sehen Sie hier ein etwas (mit Betonung auf etwas) komplizierteres Gadget, das zwei Aktionen ausführt: Es überwacht den verfügbaren Arbeitsspeicher und zeigt außerdem (auf einer Webseite) ausführlichere Systeminformationen an, wenn auf die Schaltfläche Information geklickt wird. Wir müssen wohl nicht erwähnen, dass dies noch nicht einmal ein Bruchteil dessen ist, was Sie mit Gadgets erreichen können, aber es gibt Ihnen einen besseren Einblick in die vielen Funktionen, die in ein einzelnes Gadget eingefügt werden können.

Nun ist es an Ihnen, herauszufinden, warum dieses Gadget funktioniert und wofür es dient (wir haben bereits keinen Platz mehr für diesen Monat). Hier nur noch der Code:

<html>

<head>
    <title>My Gadget</title>
    <style>
        body{width:120;height:80}
    </style>
</head>

<script language="VBScript">

    Sub Window_Onload
        GetMemory
        iTimerID = window.SetInterval("GetMemory", 10000)
    End Sub

    Sub GetMemory
        Set objLocator = CreateObject("WbemScripting.SwbemLocator")
        Set objWMIService = objLocator.ConnectServer(".", "root\cimv2")
        Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")
        For Each objItem in colItems
            DataArea.InnerHTML = objItem.FreePhysicalMemory
        Next
    End Sub

    Sub RunSub

        Set objLocator = CreateObject("WbemScripting.SwbemLocator")
        Set objWMIService = objLocator.ConnectServer(".", "root\cimv2")

        Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystem")
        For Each objItem in colItems
            strHTML = "Computer Name: " & objItem.Name & "<br>"
            strHTML = strHTML & "User Name: " & objItem.UserName & "<br><br>"
        Next

        Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")
        For Each objItem in colItems
            strHTML = strHTML & "Operating System: " & objItem.Caption & "<br>"
            strHTML = strHTML & "Service Pack: " & objItem.ServicePackMajorVersion & "<br><br>"
        Next

        Set colItems = objWMIService.ExecQuery("Select * From Win32_Processor")
        For Each objItem in colItems
            strHTML = strHTML & "Processor: " & objItem.Caption & "<br><br>"
        Next

        Set colItems = objWMIService.ExecQuery _
            ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
        For Each objItem in colItems
            strHTML = strHTML & objItem.Caption & "<br>"
            For Each strAddress in objItem.IPAddress
                strHTML = strHTML & "IP Address: " & strAddress & "<br>"
            Next
        Next

        Set objIE = CreateObject("InternetExplorer.Application")
        objIE.Navigate("about:blank")
        objIE.Toolbar = 0
        objIE.StatusBar = 0
        Set objDoc = objIE.Document.Body
        objDoc.InnerHTML = strHTML
        objIE.Visible = True
    End Sub

</script>

<body>
    <span id="DataArea"></span><p>
    <input type="button" value="Information" name="run_button" onClick="RunSub">
</body>

</html>