Ejemplo de información de la plataforma de tablet PC
Este programa comprueba la presencia y configuración de los componentes principales de MicrosoftTablet PC y Touch Technology. Determina si los componentes de tablet PC están habilitados en el sistema operativo, enumerando los nombres y la información de versión de los controles principales y el reconocedor de voz y escritura a mano predeterminados.
La aplicación usa la API de Windows GetSystemMetrics, pasando SM_TABLETPC, para determinar si la aplicación se ejecuta en un equipo tablet. SM_TABLETPC se define en WinUser.h.
De particular interés es la forma en que la aplicación usa la colección Recognizers para proporcionar información sobre el reconocedor predeterminado. Antes de intentar usar la colección Recognizers y el objeto Recognizer, la aplicación comprueba su creación correcta.
Componentes
Con el módulo de combinación retribuible, algunas partes de la API de plataforma de pc tableta se pueden instalar en versiones que no son tabletas de Vista y Windows XP Professional . La llamada a GetSystemMetrics solo indica que windows XP Tablet PC Edition está instalado. Una aplicación siempre debe determinar si hay un componente determinado disponible. La manera adecuada de determinar si se instala un componente de la API es intentar crear una instancia de un objeto o control y comprobar que existe antes de intentar usarlo, como se muestra en el ejemplo siguiente.
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
}
La aplicación descubre los componentes de voz instalados buscando en la clave del Registro adecuada:
const WCHAR* gc_wszSpeechKey = L"Software\\Microsoft\\Speech\\Recognizers";
//...
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, gc_wszSpeechKey, 0, KEY_READ,
&hkeySpeech) == ERROR_SUCCESS)
La clave se lee mediante RegQueryValueExW.
Por último, el ejemplo descubre qué controles están 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++;
}
}