Exemplo de informações da plataforma de tablet pc
Este programa verifica a presença e a configuração dos componentes principais microsoftTablet PC e Touch Technology. Ele determina se os componentes do Tablet PC estão habilitados no sistema operacional, listando nomes e informações de versão para controles principais e o reconhecimento de manuscrito e fala padrão.
O aplicativo usa a API do Windows GetSystemMetrics, passando SM_TABLETPC, para determinar se o aplicativo está em execução em um Tablet PC. SM_TABLETPC é definido em WinUser.h.
De interesse específico é a maneira como o aplicativo usa a coleção Recognizeers para fornecer informações sobre o reconhecedor padrão. Antes de tentar usar a coleção Recognizeers e o objeto Recognizer, o aplicativo testa sua criação bem-sucedida.
Componentes
Usando o módulo de mesclagem retribuível, determinadas partes da API da Plataforma tablet pc podem ser instaladas em versões não Tablet do Vista e do Windows XP Professional. A chamada GetSystemMetrics indica apenas que o Windows XP Tablet PC Edition está instalado. Um aplicativo sempre deve determinar se um determinado componente está disponível. A maneira adequada de determinar se um componente da API está instalado é tentar criar uma instância de um objeto ou controle e marcar que ela existe antes de tentar usá-la, conforme mostrado no exemplo a seguir.
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
}
O aplicativo descobre sobre os componentes de fala instalados examinando a chave do Registro apropriada:
const WCHAR* gc_wszSpeechKey = L"Software\\Microsoft\\Speech\\Recognizers";
//...
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, gc_wszSpeechKey, 0, KEY_READ,
&hkeySpeech) == ERROR_SUCCESS)
A chave é lida usando RegQueryValueExW.
Por fim, o exemplo descobre quais controles estão instalados.
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++;
}
}