Infobeispiel für die Tablet PC-Plattform
Dieses Programm überprüft das Vorhandensein und die Konfiguration der Kernkomponenten MicrosoftTablet PC und Touch Technology. Es bestimmt, ob Tablet PC-Komponenten im Betriebssystem aktiviert sind, und listet Namen und Versionsinformationen für Kernsteuerelemente sowie die Standardhandschrift- und Spracherkennung auf.
Die Anwendung verwendet die Windows-API GetSystemMetrics und übergibt SM_TABLETPC, um zu bestimmen, ob die Anwendung auf einem Tablet-PC ausgeführt wird. SM_TABLETPC ist in WinUser.h definiert.
Von besonderem Interesse ist die Art und Weise, wie die Anwendung die Erkennungssammlung verwendet, um Informationen zur Standarderkennung bereitzustellen. Vor dem Versuch, die Recognizers-Auflistung und das Recognizer-Objekt zu verwenden, testet die Anwendung die erfolgreiche Erstellung.
Komponenten
Mithilfe des wiederverteilbaren Mergemoduls können bestimmte Teile der Tablet PC-Plattform-API auf Nicht-Tablet-Versionen von Vista und Windows XP Professional installiert werden. Der GetSystemMetrics-Aufruf gibt nur an, dass Windows XP Tablet PC Edition installiert ist. Eine Anwendung sollte immer ermitteln, ob eine bestimmte Komponente verfügbar ist. Die richtige Methode, um zu ermitteln, ob eine Komponente der API installiert ist, besteht darin, zu versuchen, eine instance eines Objekts oder Steuerelements zu erstellen und zu überprüfen, ob es vorhanden ist, bevor Sie versuchen, sie zu verwenden, wie im folgenden Beispiel gezeigt.
IInkRecognizers* pIInkRecognizers = NULL;
HRESULT hr = CoCreateInstance(CLSID_InkRecognizers,
NULL,
CLSCTX_INPROC_SERVER,
IID_IInkRecognizers,
(void **)&pIInkRecognizers);
if (SUCCEEDED(hr))
{
// use the component
} else
{
// component unavailable
}
Die Anwendung ermittelt die installierten Sprachkomponenten, indem sie den entsprechenden Registrierungsschlüssel sucht:
const WCHAR* gc_wszSpeechKey = L"Software\\Microsoft\\Speech\\Recognizers";
//...
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, gc_wszSpeechKey, 0, KEY_READ,
&hkeySpeech) == ERROR_SUCCESS)
Der Schlüssel wird mithilfe von RegQueryValueExW gelesen.
Schließlich wird im Beispiel ermittelt, welche Steuerelemente installiert sind.
LPCOLESTR gc_wszProgId[NUM_CONTROLS] = {L"InkEd.InkEdit", L"msinkaut.InkOverlay"};
// ...
for (int i = 0, j = 0; i < NUM_CONTROLS; i++)
{
// Get the component info
CLSID clsid;
if (SUCCEEDED(CLSIDFromProgID(gc_wszProgId[i], &clsid)) && GetComponentInfo(clsid, info) == TRUE)
{
SetDlgItemTextW(hwnd, gc_uiCtrlId[j][0], info.wchName);
SetDlgItemTextW(hwnd, gc_uiCtrlId[j][1], info.wchVersion);
j++;
}
}