Windows Mobile

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

Nachdem man nun ein Widget starten kann will man bestimmt auch die anderen Funktionen verwenden.
Da die Header Datei nicht angegeben ist bzw. auch keine solche existiert müssen wir mit den Definitionen des DTKs vorlieb nehmen.
Hier die benötigten Funktionsdeklarationen, Strukturen und LoadLibrary & GetProcAdress Aufrufe:
 
LoadLibrary
Alle benötigten Funktionen werden von der "widgetinstallerdll.dll" exportiert.
Code:
int _tmain(int argc, _TCHAR* argv[])
{
     //Modul Laden
     HMODULE hWidgetDll = LoadLibrary (L"\windows\widgetinstallerdll.dll");
     if (hWidgetDll)
     {
          /*
          Widget Code
          */
          //Modul entladen

          FreeLibrary(hWidgetDll);
     }
     return 0;
}
 
LaunchWidget
Die LaunchWidget Funktion benötigt lediglich ein UINT als Parameter.
//HRESULT LaunchWidget(UINT nInstalledId);
HRESULT (_stdcall *lpfLaunchWidget) (UINT) = NULL;
lpfLaunchWidget = (HRESULT(_stdcall*) (UINT))GetProcAddress (hWidgetDll, L"LaunchWidget");
if (lpfLaunchWidget)
{
     //Widget mit der ID 1 starten
     HRESULT hRet = lpfLaunchWidget (1);
}
 
UninstallWidget
Die UninstallWidget Funktion benötigt lediglich ein UINT als Parameter.
//HRESULT UninstallWidget(UINT nInstalledId);
HRESULT (_stdcall *lpfUninstallWidget) (UINT) = NULL;
lpfUninstallWidget = (HRESULT(_stdcall*) (UINT))GetProcAddress (hWidgetDll, L"UninstallWidget");
if (lpfUninstallWidget)
{
     //Widget mit der ID 3 deinstallieren
     HRESULT hRet = lpfUninstallWidget (3);
}
 
GetWidgetDetails
GetWidgetDetail bekommt als Übergabeparameter den gewünschten DetailTypen aus dem WidgetDetail Enum.
Der Speicher des Rückgabewertes "lplpszValue" wird von der Funktion reserviert und muss von uns freigegeben werden.
 
enum WidgetDetails
{
WidgetNamespace,
WidgetID,
WidgetVersion,
WidgetName,
WidgetDescription,
WidgetAuthor,
WidgetAuthorURL,
WidgetAuthorEmail,
WidgetIconSource,
WidgetNetworkAccess,
WidgetLicense,
WidgetContentType,
LastWidgetDetail=WidgetContentType
};
//HRESULT GetWidgetDetails(UINT nInstalledID, WidgetDetails eID, LPTSTR* lplpszValue, UINT* lpcchValueLength);
HRESULT (_stdcall *lpfGetWidgetDetails) (UINT,WidgetDetails,LPTSTR*,UINT*) = NULL;
lpfGetWidgetDetails = (HRESULT(_stdcall*) (UINT,WidgetDetails,LPTSTR*,UINT*))GetProcAddress (hWidgetDll, L"GetWidgetDetails");
if (lpfGetWidgetDetails)
{
     LPTSTR pszWDetail = NULL;
     UINT uiLen = 0;
     //per WidgetDetails::WidgetID die WidgetID abfragen
     HRESULT hRet = lpfGetWidgetDetails (1,WidgetID,&pszWDetail,&uiLen);
     //pszWDetail wurde von GetWidgetDetails allokiert
     if(pszWDetail)
          LocalFree(pszWDetail);
}
 
GetInstalledWidgetsList
Die Funktion benötigt keine Eingabeparameter.
Die Ausgabeparemeter sind ein UINT für die Anzahl der Widgets sowie ein Array des WIDGETSUMMARY.
Der Speicher für das Array wird von der Funktion reserviert und muss von uns wieder freigegeben werden.
 
enum WidgetMIMEType
{
     TextHTML,
     LastContentType = TextHTML
};
typedef struct tagWIDGETSUMMARY
{
     UINT nInstalledID;
     TCHAR szWidgetID[MAXLEN_WIDGETID];
     TCHAR szWidgetName[MAXLEN_WIDGETNAME];
     TCHAR szIconSource[MAX_PATH];
     WidgetMIMEType wctContent;
} WIDGETSUMMARY, *LPWIDGETSUMMARY;
 
//HRESULT GetInstalledWidgetsList(LPWIDGETSUMMARY* lpWidgetList,UINT* lpcWidgetCount);
HRESULT (_stdcall *lpfGetGetInstalledWidgetsList) (LPWIDGETSUMMARY*, UINT*) = NULL;
UINT uiCount = 0;
lpfGetGetInstalledWidgetsList = (HRESULT(_stdcall*) (LPWIDGETSUMMARY*, UINT*))GetProcAddress (hWidgetDll, L"GetInstalledWidgetsList");
if (lpfGetGetInstalledWidgetsList)
{
     LPWIDGETSUMMARY lpWidgets = NULL;
     HRESULT hRet = lpfGetGetInstalledWidgetsList (&lpWidgets,&uiCount);
     //lpWidgetswurde von GetInstalledWidgetsList allokiert
     if(lpWidgets)
          LocalFree(lpWidgets);
}
 
Dokumentation
 
– 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