MSDN Magazin > Home > Ausgaben > 2007 > January >  SideShow-Minianwendungen: Einführung in da...
SideShow-Minianwendungen
Einführung in das Schreiben von Minianwendungen für Windows SideShow-Geräte
Jeffrey Richter

Themen in diesem Artikel:
  • SideShow und seine zugehörigen APIs
  • Entwickeln, Installieren und Konfigurieren von Minianwendungen
  • Gerätecacheverwaltung
  • Minianwendungsereignisse und -benachrichtigungen
In diesem Artikel werden folgende Technologien verwendet:
Windows Vista
Laden Sie den Code für diesen Artikel herunter:SideShow2007_01.exe (169 KB)
Code online durchsuchen
Moderne Anwendungen bieten dem Endbenutzer viele Informationen. Allerdings ist der Platz auf dem Bildschirm begrenzt, und die Organisation aller möglichen Informationen stellt hohe Anforderungen an Softwareentwickler und Endbenutzer. Außerdem messen wir Informationen auf unterschiedliche Arten und zu unterschiedlichen Zeiten jeweils unterschiedliche Prioritäten bei. Wenn z. B. eine Besprechung unmittelbar bevorsteht, muss ich Zeit und Ort sofort wissen. Wenn ich mit dem Auto unterwegs bin, muss ich rechtzeitig wissen, wann ich abbiegen muss. Im Allgemeinen will ich immer in der Lage sein, neu empfangene E-Mail-Nachrichten abrufen zu können. Gleichermaßen gibt es Situationen, in denen ich Informationen zum Verkehr, zu Flügen, zum Wetter, zu finanziellen Transaktionen und so weiter benötige. Benutzern die richtigen Informationen zum richtigen Zeitpunkt zur Verfügung zu stellen, ist eine schwierige Aufgabe.
Die Initiative von Microsoft zum Erstellen von Minianwendungen soll dieses Problem beseitigen. Eine Minianwendung ist eine Anwendung (oder ein Teil einer Anwendung), die Benutzern die gewünschten Daten zum richtigen Zeitpunkt und am richtigen Ort präsentiert. Derzeit bietet Microsoft drei verschiedene Arten von Minianwendungen an: Minianwendungen für Windows®-Sidebar zeigen die Informationen von Benutzern auf ihrem Desktop oder in der Windows Vista™-Sidebar an. Minianwendungen für Windows Live™ zeigen die Informationen von Benutzern auf einem beliebigen Computer über einen Webbrowser an. Und Minianwendungen für Windows SideShow™ zeigen die Informationen von Benutzern auf einem zusätzlichen Hardwaregerät über seinen SideShow-aktivierten Gerätetreiber an. In diesem Artikel liegt der Schwerpunkt auf SideShow-Hardwaregeräten, und Sie erfahren, wie Sie eine SideShow-Minianwendung schreiben, um mithilfe der verwalteten API mit diesen Geräten zu kommunizieren.

Was sind SideShow-Minianwendungen?
Windows Vista unterstützt die Fähigkeit, mit einem oder mehreren zusätzlichen Anzeigegeräten zu kommunizieren. Diese zusätzlichen Anzeigegeräte können von unterschiedlicher Form und Größe sein sowie unterschiedliche Funktionen aufweisen. Viele von diesen Geräten befinden sich noch nicht in der Produktion, sollten aber bald verfügbar sein.
Einige Geräte werden aktiviert, wenn der Computer eingeschaltet wird, andere können unabhängig vom Computer ein- und ausgeschaltet werden. Manche Geräte verfügen unter Umständen sogar über ihre eigenen aufladbaren Batterien. Einige Geräte werden eine Farb-, andere eine Graustufen- oder Schwarzweißanzeige bieten. Auf einigen Geräten können Bitmaps angezeigt werden, während andere nur Text zulassen. Einige Geräte werden unterschiedliche Mengen an geräteeigenem Speicherplatz für die Zwischenspeicherung von Daten anbieten, während andere über keinen geräteeigenen Speicherplatz verfügen. Einige werden Schaltflächen zur Navigation in den zwischengespeicherten Daten bereitstellen. Andere verfügen unter Umständen über Touchscreens.
Einige Geräte stellen gegebenenfalls eine integrierte drahtlose Technologie (z. B. Bluetooth) bereit, sodass der Computer mit dem Gerät kommunizieren kann, ohne physisch mit dem Computer verbunden zu sein. Andere verfügen über eine Kopfhörerbuchse, damit Sie Musik oder Videos abspielen können, die in den Speicher heruntergeladen wurden.
Abbildung 1 zeigt den Prototyp eines Notebookcomputers mit integriertem SideShow-Gerät sowie eine Nahaufnahme des SideShow-Geräts. Dieses SideShow-Gerät weist eine Anzeigeauflösung von 220 × 176 Pixeln und eine Farbtiefe von 16 Bit pro Pixel auf. Darüber hinaus werden Menü-, Navigations- (Links, Rechts, Oben, Unten) und Eingabetasten zur Verfügung gestellt. Dieses SideShow-Gerät verfügt über eine eigene Stromquelle, d. h. es wird über die Batterie des Computers versorgt. Allerdings muss der Computer nicht eingeschaltet werden, damit Sie mit dem Gerät arbeiten können. Im eingeschalteten Zustand verbraucht dieses Gerät ca. 4 Milliwatt Strom. Der gesamte Computer verbraucht im eingeschalteten Zustand vergleichsweise ca. 75 Watt.
Abbildung 1 Prototypnotebook mit integriertem SideShow-Gerät (Klicken Sie zum Vergrößern auf das Bild)
Abbildung 1b(Klicken Sie zum Vergrößern auf das Bild)
Wenn der Deckel des Computers geschlossen und der Computer ausgeschaltet ist, kann der Benutzer auf diese Weise trotzdem noch seine E-Mail-Nachrichten lesen, seinen Kalender überprüfen, digitale Fotos ansehen, Wegbeschreibungen abrufen, das aktuelle Datum bzw. die aktuelle Zeit überprüfen und so weiter. Und selbstverständlich können Sie Ihre Anwendung auch dahingehend ändern, dass die jeweiligen Daten ebenfalls zum SideShow-Gerät exportiert werden. Näheres hierzu weiter unten in diesem Artikel. Abbildung 2 zeigt den Prototyp einer Fernsteuerung zum Bedienen von Windows Media® Center. Das zusätzliche Anzeigegerät ermöglicht es Ihnen, einen Titel auszuwählen und in Media Center abzuspielen. Das Besondere daran ist, dass Ihr Fernsehgerät oder Bildschirm nicht eingeschaltet werden muss, um einen Titel abzuspielen. Beim Ansehen eines Films können außerdem Programminformationen vom Media Center-PC zum Windows SideShow-Gerät gesendet und gelesen werden, ohne dass die Wiedergabe des Films auf dem Bildschirm beeinträchtigt wird. Darüber hinaus können Sie mithilfe der Fernsteuerung Fernsehprogramminformationen lesen und Aufzeichnungen planen.
Abbildung 2(Klicken Sie zum Vergrößern auf das Bild)
Andere Beispiele für SideShow-Geräte sind Tastaturen mit LCD-Anzeigen, digitale Bildrahmen und sogar Mobiltelefone. An einen einzelnen Computer können mehrere SideShow-Geräte gleichzeitig angeschlossen werden. So könnte z. B. der in Abbildung 1 gezeigte Prototypnotebook sowohl über eine Tastatur als auch über eine Fernsteuerung bedient werden. Auf jedem dieser Anzeigegeräte können jeweils ähnliche oder unterschiedliche Arten von Informationen zur Verfügung gestellt werden.

Verwendung und Konfiguration
Endbenutzer konfigurieren ihre SideShow-Geräte mit dem Systemsteuerungsapplet „Windows SideShow“. Beim Öffnen dieses Applets wird ein ähnliches Fenster wie in Abbildung 3 angezeigt.
Abbildung 3 SideShow-Applet zum Steuern von Geräten und Minianwendungen (Klicken Sie zum Vergrößern auf das Bild)
Im linken Fensterbereich werden alle derzeit installierten SideShow-Hardwaregeräte nach Installationsdatum und -zeit sortiert angezeigt. Der Hauptfensterbereich enthält ein Raster. In der ersten Spalte werden die installierten Anwendungen angezeigt, die mit SideShow-Geräten kommunizieren können. Dies sind die SideShow-Minianwendungen. Standardmäßig wird Windows Vista mit zwei Minianwendungen geliefert: Windows Mail und Windows Media Player. Abbildung 3 zeigt auch eine andere von mir installierte Minianwendung (Office Outlook® 2007-Kalender, Teil von Microsoft® Office Outlook 2007) sowie eine Minianwendung (Jeff's SideShow Gadget), die ich selbst geschrieben habe. Jede zusätzliche Rasterspalte stellt ein SideShow-Gerät dar, das mit dem Computer verknüpft ist. Abbildung 3 zeigt zwei SideShow-Geräte: Windows SideShow-Simulator—0 und Logitech G-15-Tastatur.
Durch Auswählen der Kontrollkästchen im Raster legen Sie fest, mit welchen SideShow-Geräten eine Minianwendung kommunizieren kann. Sie können auch ein bestimmtes SideShow-Gerät durch Auswählen oben im Raster konfigurieren. Wenn Sie z. B. „Windows SideShow-Simulator—0“ auswählen, wird das in Abbildung 4 dargestellte Fenster angezeigt. Hier können Sie Aussehen und Verhalten des Bildschirms (Design, Sprache, Schriftgrad, Helligkeit, Hintergrundbeleuchtung und so weiter) festlegen, Sicherheits- und Datenschutzeinstellungen konfigurieren (Verwenden einer PIN zum Entsperren des Geräts, Löschen aller Daten beim Abmelden des Computers), Minianwendungen einrichten (Ein-/Ausschalten, Ändern der Reihenfolge) und das Gerät deinstallieren.
Abbildung 4 Konfigurieren eines SideShow-Geräts (Klicken Sie zum Vergrößern auf das Bild)
Viele SideShow-Geräte haben einen geräteeigenen Speicher für die Zwischenspeicherung von Minianwendungsdaten. Eine Minianwendung muss ausgeführt werden, damit Daten an ein SideShow-Gerät gesendet werden können, d. h. der Computer muss eingeschaltet sein. Daher kann der Benutzer mit Windows Vista konfigurieren, wann und wie oft sich der Computer einschalten und die Minianwendung ausführen soll. Der Benutzer konfiguriert dies durch Auswahl der Option „Set my computer to wake automatically“, die in Abbildung 3 gezeigt wird. Wenn Sie diese Option auswählen, wird das in Abbildung 5 dargestellte Fenster angezeigt. Nach dem Einschalten bleibt der Computer so lange in Betrieb, bis der im Systemsteuerungsapplet „Energieoptionen“ angegebene Zeitraum für den Standbybetrieb abgelaufen ist. Beachten Sie, dass einige Computer die automatische Aktivierung nicht unterstützen und einige Anwendungen verhindern können, dass ein Computer wieder in den Ruhezustand zurückkehrt.
Abbildung 5 Konfigurieren der Aktivierung des Geräts durch eine Minianwendung (Klicken Sie zum Vergrößern auf das Bild)

SideShow-Minianwendung und Gerätearchitektur
Abbildung 6 zeigt ein Architekturdiagramm zur Kommunikation von SideShow-Minianwendungen mit SideShow-Hardwaregeräten. Jedes Hardwaregerät muss einen Benutzermodus-Gerätetreiber enthalten, der in Windows Vista installiert werden muss. Wenn Windows mit dem Gerät kommuniziert, erstellt das Betriebssystem einen WUDFHost.exe-Prozess und lädt den Gerätetreiber in diesen Prozess. Für jeden Gerätetreiber ist eine Instanz von WUDFHost.exe vorhanden. Benutzermodus-Gerätetreiber bieten viele Vorteile. Hierzu zählen einfachere Entwicklung, leichteres Debugging, größere Systemstabilität und verbesserte Sicherheit. Weitere Informationen zum Benutzermodus-Gerätetreiberframework von Windows finden Sie unter „User-Mode Driver Framework (UMDF)
Abbildung 6 Kommunikationsarchitektur für SideShow-Minianwendung (Klicken Sie zum Vergrößern auf das Bild)
Eine SideShow-Minianwendung kann in systemeigenem oder verwaltetem Code geschrieben werden. Eine systemeigene Anwendung steuert die vom Benutzer mit der Anwendung verbundenen Geräte mithilfe von COM-Komponenten und -Methoden, die in der Datei „AuxiliaryDisplayApi.dll“ implementiert sind. (Der ursprüngliche Name für SideShow lautete „Auxiliary Display“.) Diese DLL wird mit Windows Vista geliefert und ist garantiert auf jedem Windows Vista-Computer verfügbar. Sie funktioniert allerdings nicht auf den Starter- und Home Basic-Versionen von Windows Vista. Das Hauptziel der COM-Komponenten ist es, für Entwickler die Tatsache in den Hintergrund treten zu lassen, dass verschiedene Geräte angeschlossen sein können und dass diese angeschlossenen Geräte unterschiedliche Funktionen (Bildschirmgröße, Farbe und so weiter) unterstützen.
Eine verwaltete SideShow-Minianwendung steuert die mit der Anwendung verbundenen Geräte anhand der Typen, die im Microsoft SideShow-Namespace definiert sind. Diese Typen sind in der Assemblydatei „Microsoft.SideShow.dll“ implementiert. (Ich habe dies für das Windows Vista-Team entwickelt und implementiert, und das Ganze kann über das Microsoft Download Center heruntergeladen werden.) Intern kommunizieren diese Typen direkt mit den COM-Komponenten in AuxiliaryDisplayApi.dll. Leider kann aufgrund einiger Zeitprobleme bei der Veröffentlichung nicht garantiert werden, dass die Assembly in allen Installationen von Windows Vista vorhanden ist. Wenn Sie mithilfe dieser Assembly eine verwaltete SideShow-Minianwendung schreiben, müssen Sie sicherstellen, dass die DLL auf den Computer des Endbenutzers geladen wird.
Um Entwicklern beim Testen ihres Minianwendungscodes zu helfen, wird das Windows Vista SDK mit einer SideShow-Simulatoranwendung geliefert. Diese Anwendung kann unter Windows Vista ausgeführt werden und emuliert ein SideShow-Hardwaregerät. Damit der Simulator funktionsfähig wird, müssen Sie zunächst Folgendes von einer Eingabeaufforderung aus ausführen:
WindowsSideShowVirtualDevice.exe /regserver
Damit werden die für den Simulator erforderlichen COM-Komponenten registriert. Sie müssen die COM-Komponenten nur einmal auf einem Computer registrieren. Führen Sie anschließend zum Testen Ihrer Minianwendung die VirtualSideShow.exe-Anwendung aus, die ebenfalls mit dem SDK geliefert wird.
Die Microsoft.SideShow.dll-Assembly definiert eine Anzahl von Typen in den Namespaces „Microsoft.SideShow“ und „Microsoft.SideShow.SimpleContentFormat“, damit SideShow-Minianwendungen einfacher erstellt bzw. die SideShow-Funktionen besser in eine bereits vorhandene Anwendung integriert werden können. Die wichtigsten und am häufigsten verwendeten Klassen sind in Abbildung 7 dargestellt.

KlasseBeschreibung
GadgetRegistrationEine statische Klasse zur Unterstützung der Konfiguration von Minianwendungen in der Registrierung.
SideShowGadgetEine abstrakte Basisklasse, die eine Verbindung zwischen Anwendungscode und einem oder mehreren SideShow-Hardwaregeräten darstellt, die der Benutzer angeschlossen hat. Diese Klasse ist von „Component“ abgeleitet und kann daher in einer Windows Form abgelegt werden.
ScfSideShowGadgetDiese von SideShowGadget abgeleitete Klasse ermöglicht es der Anwendung, Simple Content Format (SCF)-XML-Zeichenfolgen und Bilder an ein SideShow-Gerät zu senden.
ScfEine statische Klasse, die statische Methoden anbietet, um die Erstellung von SCF-XML-Zeichenfolgen in Quellcode zu vereinfachen.
DeviceCapabilitiesEin Objekt dieser Klasse repräsentiert die Funktionen eines Hardwaregeräts. Diese Klasse kann von einer Minianwendung zur Feinabstimmung der Daten verwendet werden, die sie zur Übertragung an ein Gerät auswählt.

Installieren einer Minianwendung
Beim Entwickeln einer SideShow-Minianwendung müssen Sie zuerst eine GUID für die Anwendung erstellen. Diese GUID wird zur ID der Minianwendung, und Windows Vista verwendet die ID, um mit der Minianwendung zu kommunizieren. Wenn Sie eine Minianwendung installieren, sollte Ihr Installationsprogramm einen neuen Registrierungsunterschlüssel anhand der GUID erstellen, die Sie für Ihre Minianwendung erzeugt haben:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\SideShow\Gadgets\{<GUID>}
Wenn Sie die Minianwendung für alle Benutzer auf dem Computer installieren möchten, verwenden Sie „HKEY_LOCAL_MACHINE“ anstelle von „HKEY_CURRENT_USER“. Unter diesem Registrierungsunterschlüssel müssen Sie dann einige Registrierungswerte hinzufügen, wie in Abbildung 8 gezeigt.

RegistrierungswertBeschreibung
SymbolDer Pfad der Datei (und optional die ID der Win32 ®-Symbolressource), der sich auf ein Symbol bezieht, das in der Systemsteuerung und auf dem Gerät selbst angezeigt werden soll. Wenn nichts angegeben ist, wird ein Standardsymbol angezeigt. Es empfiehlt sich, Bilder mit einer Auflösung von 16 x 16, 32 x 32 und 48 x 48 Pixeln bereitzustellen, die eine Farbtiefe von 32 Bit (mit Alphakanal) verwenden.
FriendlyNameEine Zeichenfolge (oder ein Pfadname) und eine ID für eine Win32-Zeichenfolgenressource (für eine lokalisierte Zeichenfolge), die als Name der Minianwendung in der Systemsteuerung angezeigt werden soll. Wenn nichts angegeben ist, wird dem Benutzer keine Zeichenfolge angezeigt.
StartCommandDer Pfad der ausführbaren Datei, die den Code der Minianwendung enthält. Windows Vista verwendet diese Informationen, um die Anwendung automatisch aufzurufen, wenn sich ein Benutzer anmeldet, ein schneller Benutzerwechsel erfolgt, der Computer den Ruhezustand verlässt oder der Benutzer eine Minianwendung für ein Gerät aktiviert. (An dieser Stelle bedarf es keiner großen Komplexität. Windows Vista ruft Minianwendungen ausgesprochen häufig auf, deshalb sollten Minianwendungen klein gehalten werden. Ferner sollte eine Minianwendung automatisch geschlossen werden, wenn bereits eine andere Instanz der Anwendung ausgeführt wird oder wenn keine Geräte verbunden sind.)
EndpointsDie Liste unterstützter Endpunkte, die entweder im iCal- oder im SCF-Format vorliegen können. iCal (siehe www.ietf.org/rfc/rfc2445.txt) ist eine Textdarstellung, die zur Veröffentlichung von Kalenderinformationen entworfen wurde. Die Minianwendung Office Outlook 2007-Kalender verwendet diesen Endpunkt, um iCal-Daten an ein SideShow-Gerät zu senden, sodass das Gerät die Kalenderdaten des Benutzers rendern kann. Nur wenige Minianwendungen und Geräte unterstützen den iCal-Endpunkt. Im Gegensatz dazu beinhaltet SCF eine Reihe von XML-Inhaltsseiten, die aufeinander verweisen. Da die meisten Anwendungen das SCF-Format verwenden werden, steht es bei diesem Artikel im Vordergrund.
CacheAlgorithmDieser Wert gibt dem Gerät einem Hinweis darauf, wie der Inhalt der Minianwendung verwaltet werden soll. (Geräte haben tendenziell einen sehr begrenzten Cachespeicher, und mit einem einzelnen Gerät sind gegebenenfalls zahlreiche Minianwendungen verbunden.) Die Minianwendung kann das Gerät anweisen, die neusten Elemente (0, die Standardeinstellung), die ältesten Elemente (1), häufig aufgerufene Elemente (2) oder zuletzt aufgerufene Elemente (4) beizubehalten.
OnlineOnlyWenn der Wert 1 ist, kann der Benutzer nur mit der Minianwendung auf dem Gerät arbeiten, wenn sowohl Windows als auch die Minianwendung ausgeführt werden.
PropertyPageEine Minianwendung kann ein Dialogfeld für Konfigurationseinstellungen bereitstellen, das über die Windows-Systemsteuerung gestartet werden kann. Dazu muss die Minianwendung eine COM-Komponente definieren, die die IPropertyPage-Schnittstelle implementiert. Während des Setups fügt die Minianwendung dann diesen Registrierungswert hinzu, der auf die GUID der COM-Komponente verweist. Sofern dies angegeben wird, versieht die Systemsteuerung die Minianwendung mit einem Unterstrich, damit der Benutzer darauf klicken und das Dialogfeld zur Konfiguration der Minianwendung aufrufen kann.
Das Installationsprogramm Ihrer Minianwendung sollte seinen eigenen Registrierungsunterschlüssel erstellen und die erforderlichen Registrierungswerte festlegen. Im Normalfall legt ein Installationsprogramm diese Registrierungsergänzungen in einer .reg-Datei ab und ruft diese Datei beim Anwendungssetup auf. Kurz vor Abschluss des Setups sollten Sie den folgenden Befehl ausführen, damit Windows Vista den Benutzer mithilfe einer QuickInfo darauf hinweist, dass die Minianwendung installiert wurde:
SchTasks.exe /run /tn Microsoft\Windows\SideShow\GadgetManager
Die Aufgabe „GadgetManager“ zeigt die QuickInfo nicht an, wenn keine Geräte installiert sind, wenn sie erkennt, dass seit dem letzten Aufruf keine neuen Minianwendungen installiert wurden oder wenn der Benutzer durch Deaktivieren des Kontrollkästchen „Notify me when new gadgets are installed“ (siehe Abbildung 3) die QuickInfo ausgeschaltet hat.
Nach Installation der Minianwendung können Benutzer die Systemsteuerung öffnen, um die Minianwendung zu konfigurieren und mit den gewünschten Hardwaregeräten zu verbinden. Aus Sicherheitsgründen ist es einer neu installierten Minianwendung jedoch standardmäßig nicht erlaubt, mit Geräten zu kommunizieren.
Wenn eine Minianwendung ausgeführt wird, sendet sie gewöhnlich in regelmäßigen Abständen Daten an die mit ihr verbundenen Geräte. Nachdem der Computer ausgeschaltet wurde, sind durch die Zwischenspeicherung von Daten auf den Geräten diese Daten jederzeit verfügbar, ohne dass der Computer wieder eingeschaltet werden muss. Während eine Minianwendung ausgeführt wird, empfängt sie eine entsprechende Benachrichtigung von Windows, wenn der Benutzer der Minianwendung mithilfe der Systemsteuerung ein Gerät hinzufügt oder daraus entfernt.
Eine Minianwendung kann auch als „nur online“ gekennzeichnet werden, d. h. dass der Benutzer nur mit der Minianwendung auf dem Gerät kommunizieren kann, wenn sowohl der Computer als auch die Minianwendung unter Windows ausgeführt werden. Befindet sich der Computer im Standbymodus oder im Ruhezustand, wenn der Benutzer diese Minianwendung auf dem Gerät aufruft, fragt das Gerät den Benutzer, ob der Computer eingeschaltet werden soll. Wenn der Benutzer mit „Ja“ antwortet, wird der Computer eingeschaltet. Sobald der Computer läuft und der Benutzer angemeldet ist, ruft das Gerät die Minianwendung auf. Wenn der Computer in diesem Moment heruntergefahren wird, fordert das Gerät den Benutzer auf, den Computer manuell einzuschalten und sich anzumelden, damit die Minianwendung auf dem Gerät aufgerufen werden kann.

Gerätecacheverwaltung
Da Geräte nur einen begrenzten Cachespeicher besitzt und Benutzer eventuell mehrere Minianwendungen mit einem Gerät verbunden haben, müssen die Geräte Speicher effizient verwalten. Dies wird von unterschiedlichen Geräten auf unterschiedliche Weise gehandhabt. Ich erkläre Ihnen hier die Funktionsweise von Geräten mit Microsoft-Firmware.
Die aktuelle Microsoft-Firmware teilt den Speicher auf dem Gerät gleichmäßig auf alle damit verbundenen Minianwendungen auf. Wenn drei Minianwendungen mit einem Gerät verbunden sind, erhält jede Minianwendung garantiert ein Drittel des Speichers. Einzelne Minianwendungen dürfen einen größeren Anteil verwenden, wenn andere Minianwendungen weniger Speicher belegen. Wenn eine Minianwendung weniger als das zugewiesene Minimum an Speicher verwendet und mehr Speicher benötigt, kann sie die erforderliche Speichermenge einer Minianwendung entziehen, die mehr als den zugewiesenen Mindestspeicher belegt.
Gleichermaßen kann eine Minianwendung, die mehr als ihren Mindestspeicher benötigt, Speicher von der Minianwendung mit der niedrigsten Priorität abziehen, die ihr Minimum an Speicher überschritten hat. In Abbildung 3 wird eine Option angezeigt, mit der Sie die Reihenfolge der Minianwendungen ändern können. Minianwendungen, die der Benutzer an die Spitze der Liste stellt, haben eine hohe Priorität, und ihnen wird mehr Speicher zugewiesen, während Minianwendungen weiter unten in der Liste eine geringere Priorität haben und gegebenenfalls Speicher abgeben müssen. Wenn eine Minianwendung Speicher abgibt, verwendet das Gerät die Cacherichtlinieneinstellung, die über den Registrierungswert „CacheAlgorithm“ der Minianwendung festgelegt wurde.
Entwickler von Minianwendungen sollten beachten, dass es keine Garantie dafür gibt, dass ein Inhalt, der auf ein Gerät verschoben wurde, auch tatsächlich auf diesem Gerät bleibt. Wenn der Benutzer gelöschte Inhalte einsehen möchte, muss das Gerät die Minianwendung unter Windows benachrichtigen, damit es den gelöschten Inhalt erneut auf das Gerät verschieben kann. Wenn die Minianwendung den fehlenden Inhalt nicht innerhalb eines angemessenen Zeitraums sendet (dieser Zeitraum ist je nach Gerät unterschiedlich; auf dem Simulator beträgt er drei Sekunden), informiert das Gerät den Benutzer, dass der Inhalt fehlt. Im Unterschied zur systemeigenen SideShow-API speichert die verwaltete SideShow-Bibliothek alle Inhalte unter Windows zwischen und sendet sie automatisch an das Gerät zurück, solange die Minianwendungsprozesse unter Windows Vista aktiv sind und ausgeführt werden.

Lebensdauer einer Minianwendung
Windows muss eine Minianwendung ausführen, damit sie Informationen auf ein SideShow-Gerät herunterladen kann. Es gibt grundsätzlich zwei Arten von Minianwendungen: UI-Minianwendungen und Nicht-UI-Minianwendungen. Eine UI-Minianwendung ist eine Anwendung, die der Benutzer ausführt und mit der er kommuniziert. Stellen Sie sich z. B. eine Windows Forms-Anwendung vor, die Sie über den Windows-Explorer aufrufen. Beim Bearbeiten der Anwendung kann diese Daten auf das Gerät herunterladen. Wenn Sie die Anwendung beenden, bleiben die Informationen auf dem Gerät, und Sie können darauf zugreifen, wenn der Computer ausgeschaltet ist. Die Lebensdauer dieser Anwendung wird vollständig durch den Benutzer bestimmt. Microsoft Office Outlook 2007 ist ein Beispiel für eine UI-Minianwendung.
Eine Nicht-UI-Minianwendung hat keine Benutzeroberfläche. Sie läuft im Hintergrund, überwacht gegebenenfalls bestimmte Prozesse und sendet regelmäßig Daten an das Gerät, sodass diese angezeigt werden können, wenn der Computer ausgeschaltet ist. Damit Benutzer Nicht-UI-Minianwendungen nicht wahrnehmen, bietet Windows einen Mechanismus, über den Nicht-UI-Minianwendungen automatisch ohne Eingriff des Benutzers aufgerufen werden können. Wenn sich der Benutzer bei seinem Konto anmeldet, verlässt der Computer den Standbymodus oder verwendet das Systemsteuerungsapplet „SideShow“, um die Verbindung zwischen einem Gerät und einer Minianwendung herzustellen bzw. zu trennen. Windows ruft dann automatisch alle in der Registrierung vorhandenen Minianwendungen durch Ausführen ihrer StartCommand-Registrierungswerte auf.
Windows verwendet dazu keinen hoch entwickelten Algorithmus, sondern ruft einfach alle registrierten Minianwendungen auf. Unter Umständen könnte hierdurch der Fall eintreten, dass eine Minianwendung bereits ausgeführt wird und Windows die Anwendung erneut ausführt, wenn der Benutzer die Verbindung zu einem Gerät herstellt oder trennt. Aus diesem Grund sollten Nicht-UI-Minianwendungen unmittelbar prüfen, ob bereits eine Anwendungsinstanz ausgeführt wird. Zusätzliche Instanzen sollten dann einfach geschlossen werden. Darüber hinaus sollte eine Nicht-UI-Minianwendung normalerweise automatisch geschlossen werden, wenn der Benutzer alle mit ihr verbundenen Geräte getrennt hat. Weitere Informationen dazu finden Sie im Abschnitt „Ereignisse“ weiter unten in diesem Artikel.
UI-Minianwendungen sollten unter Umständen ebenfalls sicherstellen, dass nur eine Instanz ausgeführt wird, um zu verhindern, dass die einzelnen Anwendungen Daten überschreiben, die von einer anderen Instanz an das Gerät gesendet wurden. Ferner möchten Sie im Normalfall nicht, dass Windows UI-Minianwendungen automatisch aufruft (da sonst die Benutzeroberfläche angezeigt würde). Deshalb sollten die meisten UI-Minianwendungen keinen StartCommand-Registrierungswert haben.

Inhalt
Alle Minianwendungen übertragen Inhalt auf ein Gerät. Das Gerät verfügt über eine Homepage, auf der alle mit dem Gerät verbundenen Minianwendungen angezeigt werden. In Abbildung 9 stellt das linke obere Bild einen Beispielbildschirm für eine solche Homepage dar. Für jede Minianwendung werden ein Symbol, ein Name und optional Text angezeigt. Das Symbol und der Name werden durch die Registrierungswerte „Symbol“ und „FriendlyName“ festgelegt. Der hier gezeigte Text wird „Glance Content“ genannt und von der Minianwendung durch Aufrufen der SideShowGadget-Methode „AddGlanceContent“ an das Gerät gesendet, wenn die Minianwendung ausgeführt wird.

Navigieren durch Minianwendungsbildschirme
Abbildung 9a Homepage des Geräts (Klicken Sie zum Vergrößern auf das Bild)
Abbildung 9b Homepage der Minianwendung (Inhalts-ID 1) (Klicken Sie zum Vergrößern auf das Bild)
Abbildung 9c Textseite (Inhalts-ID 2) (Klicken Sie zum Vergrößern auf das Bild)
Abbildung 9d Bildseite (Inhalts-ID 3; zeigt ein Bild mit Inhalts-ID 1000) (Klicken Sie zum Vergrößern auf das Bild)
Wenn der Benutzer die Minianwendung auf dem Gerät aufruft, rendert das Gerät den Inhalt, der zuvor von der Minianwendung während der Ausführung unter Windows heruntergeladen wurde. Derzeit unterstützt SideShow zwei verschiedene Arten von Inhalt: Simple Content Format (SCF) und iCal; Letzteres wird in diesem Artikel nicht behandelt. SCF-Inhalt besteht aus einem Satz von XML-Zeichenfolgen, der von der Minianwendung an das Gerät gesendet wird. Das Gerät analysiert die XML-Zeichenfolgen, um den Inhalt auf dem Gerät zu rendern.
Mit dem neuen SCF-Format kann die Minianwendung drei Arten von Inhalt definieren: Text und Bilder, Menüs und Kontextmenüs, die aus Elementen bestehen, die die Navigation zu anderem Inhalt initiieren, und Dialoge mit Fragen für den Benutzer, die zur Navigation zu anderem Inhalt dienen. Details zum SCF-XML-Schema finden Sie unter windowssdk.msdn.microsoft.com/ms744133.aspx.
Die verwaltete SideShow-Assembly (Microsoft.SideShow.dll) umfasst eine öffentliche, statische Scf-Klasse, die eine Reihe statischer Methoden enthält, mit denen Sie die XML-Zeichenfolge leicht in Code erstellen können. Die Methode „DownloadDataToDevices“, die in Abbildung 10 dargestellt ist, verdeutlicht, wie eine ScfSideShowGadget-Anwendung geöffnet und Glance String Content gesendet wird. Das Beispiel zeigt auch, wie die ScfSideShowGadget-Methode „AddContent“ aufgerufen wird, um SCF-Menü-, SCF-Text- und SCF-Bildinhalt an ein Gerät zu senden. Jeder Teil des Inhalts wird durch eine Inhalts-ID identifiziert. Die erste Seite der Minianwendung (das Bild unten links in Abbildung 9) ist die Homepage, die stets die Inhalts-ID 1 hat (durch die ScfSideShowGadget-Konstante „HomePageContentId“ dargestellt). Wenn der Benutzer das Menüelement „See Text“ auswählt, navigiert das Gerät zur Inhaltsseite mit der ID 2; wenn der Benutzer das Menüelement „See Image“ auswählt, navigiert das Gerät zur Inhaltsseite mit der ID 3. Seite 3, die Bildseite, enthält XML, die beschreibt, wie das Bild angezeigt werden soll (zentriert und mit automatischer Anpassung). Diese Seite bezieht sich auch auf das eigentliche Bild, dem ich die Inhalts-ID 1000 zugewiesen habe. In meinem Code habe ich das Bild aus einer Assemblyressource extrahiert.
private static void DownloadDataToDevices() {
   // Construct a SCF SideShow gadget for our gadget's Guid
   using (ScfSideShowGadget gadget = new ScfSideShowGadget(s_gadgetId)) 
   {
      // Add Glance content showing date/time of last update
      gadget.AddGlanceContent(
         String.Format("Content updated on {0}{1:D}.", 
            Environment.NewLine, DateTime.Now));

      // The home page is a menu with an item that goes to some 
      // text and another item that goes to an image
      gadget.AddContent(
         Scf.Menu(ScfSideShowGadget.HomePageContentId, 
            "Simple Gadget Menu", ScfSelectAction.Target,
            Scf.Item(2, "See text"), Scf.Item(3, "See image")));

      // This is the text page
      gadget.AddContent(
         Scf.Content(2, "This is the Text Page",
            Scf.Txt(ScfAlign.Left, true, Color.Red, 
               "This is some text")));

      // This is the image page
      gadget.AddContent(
         Scf.Content(3, "This is the Image Page",
            Scf.Img(1000, ScfAlign.Center, ScfImageFit.Auto, 
               "alt picture text")));

      // This is the image itself (that appears on the image page)
      Stream imageStream = Assembly.GetEntryAssembly().
         GetManifestResourceStream(
            "SimpleSideShowGadget.Aidan And Jeff.jpg"); 
      gadget.AddContent(1000, ImageContentTransforms.ReduceColorDepth | 
         ImageContentTransforms.StretchToFit,
         Image.FromStream(imageStream));
   }
}


Funktionen, Ereignisse und Benachrichtigungen
Eine Minianwendung kann Windows abfragen, um festzustellen, wie viele Geräte verbunden sind und welche Funktionen diese Geräten haben. Beispiele für Funktionen umfassen „DeviceId“, „ScreenType“ (Bitmap oder Text), „ScreenWidth“, „ScreenHeight“, „ClientAreaWidth“, „ClientAreaHeight“, „ColorDepth“ und „SupportedImageFormats“.
Eine Minianwendung könnte mithilfe der Gerätefunktionen bestimmen, welcher Inhalt auf ein Gerät verschoben werden soll. In der Beispielanwendung zu diesem Artikel, wird gezeigt, wie eine Minianwendung die Anzahl der verbundenen Geräte sowie die Funktionen dieser Geräte abfragen kann.
Wenn eine Minianwendung ausgeführt wird, kann sie Ereignisse von einem Gerät empfangen (in Abbildung 11 veranschaulicht), indem sie bei mehreren Ereignissen registriert ist. Der Typ „SideShowGadget“ (die Basisklasse aller Minianwendungstypen) bietet Ereignisse, die für alle Minianwendungen unabhängig vom Endpunkt gelten. Der Typ „ScfSideShowGadget“ (von „SideShowGadget“ abgeleitet) bietet zusätzliche Ereignisse bezüglich des SCF-Minianwendungsendpunkts. Eine Anwendung kann auf diese Ereignisse reagieren, um Inhalt hinzuzufügen oder zu entfernen. Für eine hoch entwickelte Minianwendung ist es eventuell erforderlich, dass sie fortlaufend ausgeführt wird, damit sie auf diese Ereignisse reagieren kann. In diesem Falle sollte der Registrierungswert „OnlineOnly“ der Minianwendung auf 1 gesetzt werden.

EreignisBeschreibung
DeviceAddedWird ausgelöst, wenn der Benutzer ein Gerät mit der Minianwendung verbindet. Der empfangenden Methode werden die Gerätefunktionen des Geräts übergeben.
DeviceRemovedWird ausgelöst, wenn der Benutzer ein Gerät von der Minianwendung trennt. Der empfangenden Methode werden die Gerätefunktionen des Geräts übergeben.
AllDevicesRemovedWird ausgelöst, wenn der Benutzer alle Geräte von einer Minianwendung getrennt hat. Gewöhnlich wird eine Nicht-UI-Minianwendung automatisch geschlossen, wenn sie dieses Ereignis empfängt.
ContentMissingWird ausgelöst, wenn der Benutzer versucht, zu fehlendem Inhalt auf dem Gerät zu navigieren. Der empfangenden Methode wird die ID des fehlenden Inhalts übergeben. Wie bereits erwähnt, speichert der verwaltete Wrapper alle Inhalte in einer Sammlung. Wenn ein Gerät Inhalt aufgrund der (durch den Registrierungswert „CacheAlgorithm“ festgelegten) Cacherichtlinieneinstellung der Minianwendung verwirft, sendet der verwaltete Wrapper den Inhalt automatisch an das Gerät zurück, und Ihr Code wird dieses Ereignis nicht empfangen. Dies ist einer der großen Vorteile bei der Verwendung einer verwalteten API gegenüber einer systemeigenen API.
GadgetEnterWird ausgelöst, wenn der Benutzer die Minianwendung auf dem Gerät aufruft.
GadgetExitWird ausgelöst, wenn der Benutzer die Minianwendung auf dem Gerät schließt
ContentNavigateNur für SCF-Minianwendungen. Wird ausgelöst, wenn der Benutzer von einer Inhaltsseite zu einer anderen navigiert. Der empfangenden Methode werden die ID der vorherigen Seite, die ID der Zielseite und die Schaltfläche übergeben, die die Navigation verursacht hat.
MenuSelectNur für SCF-Minianwendungen. Wird ausgelöst, wenn der Benutzer ein Element in einem Menü auswählt. Der empfangenden Methode werden die ID der vorherigen Seite, die ID der Zielseite, die ID des Menüelements und die Schaltfläche übergeben, die die Menüauswahl verursacht hat.
ContextMenuSelectNur für SCF-Minianwendungen. Wird ausgelöst, wenn der Benutzer ein Element in einem Kontextmenü auswählt. Der empfangenden Methode werden die ID der vorherigen Seite, die ID der Zielseite, die ID des vorherigen Elements, die ID der Menüseite und die ID des Menüelements übergeben.
Wenn eine Minianwendung ausgeführt wird, kann sie einem SideShow-Gerät eine Benachrichtigung senden, indem sie die SideShowGadget-Methode „ShowNotification“ aufruft. Eine Minianwendung würde eine Benachrichtigung für Besprechungserinnerungen, E-Mail-Warnungen, eine eingehende Sofortnachricht oder Systemwarnungen anzeigen. Eine Benachrichtigung ähnelt einem Meldungsfeld, wird jedoch auf dem Hardwaregerät angezeigt. Eine Benachrichtigung besteht aus einer ID, einem Symbol, einer Zeichenfolgenbeschriftung, einer Zeichenfolgennachricht und einem Ablaufzeitpunkt. Das Gerät zeigt dann so lange die Benachrichtigung an, bis sie vom Benutzer geschlossen wird oder der Ablaufzeitpunkt erreicht ist. Eine Anwendung kann eine Benachrichtigung auch widerrufen, indem sie die SideShowGadget-Methode „RevokeNotification“ aufruft und die Benachrichtigungs-ID weitergibt.

Schlussbemerkung
In diesem Artikel wurden die Ziele der Windows SideShow-Funktion beschrieben, und es wurde ausführlich erläutert, wie ein Endbenutzer Minianwendungen konfiguriert und mit diesen kommuniziert. Es wurde außerdem gezeigt, wie Entwickler Unterstützung für SideShow in ihre neuen oder bestehenden verwalteten Anwendungen integrieren können. Mithilfe dieser verwalteten Wrapper sollte es Ihnen mühelos gelingen, SideShow-Funktionalität in Ihre Anwendungen zu integrieren.
Ich persönlich finde die neue Windows SideShow-Funktion höchst interessant, da sie Benutzern neue Möglichkeiten für den Zugriff auf und die Arbeit mit Daten bietet. Im Laufe der nächsten Jahre wird voraussichtlich eine Fülle von neuen Hardwaregeräten mit Unterstützung für SideShow verfügbar sein. Vor allem kann ich es kaum erwarten, bis auch Media Center-Fernsteuerungen und Mobiltelefone SideShow unterstützen. Es dürfte nicht lange dauern, bis diese unglaublich nützlichen Geräte ebenso alltäglich sind wie ein PDA oder ein Mobiltelefon.

Jeffrey Richter ist Mitbegründer des Unternehmens Wintellect (www.Wintellect.com), das sich auf die Schulung und Unternehmensberatung spezialisiert. Er ist Autor verschiedener Bücher, einschließlich „CLR via C#“ (Microsoft Press, 2006). Jeffrey schreibt auch redaktionelle Beiträge für das MSDN Magazin und ist seit 1990 als Berater für Microsoft tätig.

Page view tracker