Windows Mobile

Ein Windows Mobile ABC: L wie LaunchWidget (Teil 1 von 3)

Wer das Windows Mobile 6.5.3 DTK installiert hat und dort in der Dokumentation den Buchstaben L bei der Indexsuche eingibt wird an 26er Stelle den LaunchWidget Eintrag finden.
Kurzbeschreibung dieser Funktion: Startet ein Widget.
Prima dachte ich mir, mal schauen ob ich das für mein ABC verwenden kann.
Über die Navigationsheader der Dokumentation habe ich mir dann noch die restlichen Funktionen angeschaut.
Insgesamt 4 Funktionen gibt es für Widgets:
  • GetInstalledWidgetsList: Liefert Informationen und die Anzahl der installierten Widgets
  • LaunchWidget: Startet ein Widget
  • GetWidgetDetails: Liefert weitere Informationen zu einem Widget
  • UninstallWidget: Deinstalliert ein Widget

Um LauchWidget auszuführen und das gewünschte Ergebnis zu erzielen müssen wir der Funktion einem Parameter "nInstalledId" mitliefern.

Da man ja sicherlich ein bestimmtes Widget ausführen möchte muss man also wissen welche ID dieses Widget im System hat.

Dazu verwendet man die Funktion GetInstalledWidgetList die über ein Array der "WIDGETSUMMARY" Struktur die wichtigsten Informationen über alle installierten Widgets liefert. Unter anderem auch die benötigte ID.

Zusätzlich enthält die WIDGETSUMMARY Struktur auch den Namen, die URL und den Pfad zu dem Widget Icon. Man kann sich also mit diesen Funktionen ein kleines Widget Start & Verwaltungszentrum bauen.

Leider gibt es dabei nur einen kleinen Knackpunkt: Es ist weder eine Headerdatei, noch eine LIB angegeben.

Auch im LIB Ordner bzw. im Header Ordner des SDKs/DTKs habe ich nichts dazu gefunden.

Nur gut das man nicht gezwungen ist mit einer LIB zu arbeiten. Man kann ja auch über LoadLibrary und GetProcAdress an die Funktionen gelangen.

Jetzt gilt es nur noch herauszufinden welche DLL diese Funktionen anbietet. Netterweise liefert der Windows Mobile 6.5.3 bereits 2 Widgets mit, welche sich über das Startmenü starten lassen.

Die Einträge des Starmenüs findet auf dem Gerät unter "WindowsStart MenuPrograms".

Wenn man sich die Dateien "MSN Money.lnk" und "MSN Weather.lnk" auf seinen PC kopiert und sich den Inhalt mit Notepad anschaut wird man feststellen das

beide Shortcuts auf "windowsriahost.exe" verweisen und als Parameter jeweils eine Zahl übergeben wird. Diese Zahl stellt die ID dar, und riahost.exe wird vermutlich die dementsprechenden Widget Funktionen aufrufen. Also schauen wir uns per "Remoteprozess-Viewer" doch mal an welche DLLs die riahost.exe so alles lädt.

Außer einer "widgetcom.dll" ist nichts auffälliges in der Liste, doch um es vorweg zu nehmen: Wenn wir den LoadLibrary/GetProcAdress Aufruf mit dieser DLL durchführen werden wir keinen Erfolg haben.

Eine andere Möglichkeit ein Widget zu starten ist über den Marketplace verfügbar. Allerdings nur für Widgets die auch über den Marketplace installiert wurden.

MSN Weather und MSN Money können aber über den Marketplace erneut installiert werden, und somit auch über die Marketplace Applikation gestartet werden.

Siehe da, der Remoteprozess-Viewer listet uns eine "widgetinstallerdll.dll" auf. Das kling ja vielversprechend.

In einer kleinen SmartDevice Konsolen Anwendung implementieren wir nun mal folgenden Code:

int _tmain(int argc, _TCHAR* argv[])
{
     //Widget DLL laden
     HMODULE hWidgetDll = LoadLibrary (L"\windows\widgetinstallerdll.dll");
     if (hWidgetDll)
     {
          //LauchWidget Funktionspointer anlegen
          HRESULT (_stdcall *lpfLaunchWidget) (UINT) = NULL;
          //LauchWidget Funktionspointer holen
          lpfLaunchWidget = (HRESULT(_stdcall*) (UINT))GetProcAddress (hWidgetDll, L"LaunchWidget");
          if (lpfLaunchWidget)
          {
               //LaunchWidget ausführen
               HRESULT hRet = lpfLaunchWidget (1);
          }
          //Widget DLL entladen
          FreeLibrary(hWidgetDll);
    }
    return 0;
}

Und siehe da, das MSN Money Widget wird gestartet.

– Patrick

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s