Ukázka informací o platformě Tablet PC
Tento program zkontroluje přítomnost a konfiguraci základních komponent počítačů MicrosoftTablet a touch Technology. Určuje, jestli jsou v operačním systému povolené komponenty tabletu PC, výpis názvů a informací o verzích pro základní ovládací prvky a výchozí rozpoznávání rukopisu a rozpoznávání řeči.
Aplikace používá rozhraní GetSystemMetrics Windows API, kterému předává SM_TABLETPC, aby zjistila, zda je aplikace spuštěná na Tablet PC. SM_TABLETPC je definován v winUser.h.
Zvlášť zajímavý je způsob, jakým aplikace využívá kolekci rozpoznávačů k poskytování informací o výchozím rozpoznávači. Než se pokusíte použít kolekci Recognizers a objekt Recognizer, aplikace ověří, zda byly úspěšně vytvořeny.
Součásti
Pomocí znovu distribuovatelného slučovacího modulu mohou být některé části rozhraní TABLET PC Platform API nainstalovány v jiných verzích než Tablet Vista a Windows XP Professional . Volání GetSystemMetrics označuje pouze, že je nainstalován systém Windows XP Tablet PC Edition. Aplikace by měla vždy určit, jestli je daná komponenta k dispozici. Správným způsobem, jak určit, jestli je nainstalována součást rozhraní API, je pokus o vytvoření instance objektu nebo ovládacího prvku a kontrolu, zda existuje před pokusem o jeho použití, jak je znázorněno v následujícím příkladu.
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
}
Aplikace zjistí informace o nainstalovaných komponentách řeči vyhledáním příslušného klíče registru:
const WCHAR* gc_wszSpeechKey = L"Software\\Microsoft\\Speech\\Recognizers";
//...
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, gc_wszSpeechKey, 0, KEY_READ,
&hkeySpeech) == ERROR_SUCCESS)
Klíč se čte pomocí RegQueryValueExW.
Nakonec vzorek zjistí, které ovládací prvky jsou nainstalovány.
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++;
}
}