Пример сведений о платформе планшетного компьютера
Эта программа проверяет наличие и конфигурацию основных компонентов MicrosoftTablet PC и Touch Technology. Он определяет, включены ли компоненты планшетного ПК в операционной системе, перечисляются имена и сведения о версиях для основных элементов управления, а также распознавателя почерка и речи по умолчанию.
Приложение использует API GetSystemMetrics Windows, передавая SM_TABLETPC, чтобы определить, работает ли приложение на планшетном компьютере. SM_TABLETPC определен в WinUser.h.
В частности, приложение использует коллекцию Распознавателей для предоставления сведений о распознавателе по умолчанию. Прежде чем пытаться использовать коллекцию Распознавателей и объект Распознавателя, приложение проверяет их успешное создание.
Компоненты
С помощью модуля слияния, распространяемого повторно, некоторые части API платформы планшетного пк могут быть установлены в версиях, отличных от планшетов Vista и Windows XP Professional. Вызов GetSystemMetrics указывает, что установлена версия Windows XP Tablet PC Edition. Приложение всегда должно определить, доступен ли данный компонент. Правильный способ определить, установлен ли компонент API, заключается в попытке создать экземпляр объекта или элемента управления и проверить, существует ли он перед попыткой его использования, как показано в следующем примере.
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
}
Приложение узнает об установленных компонентах речи, выполнив поиск в соответствующем разделе реестра:
const WCHAR* gc_wszSpeechKey = L"Software\\Microsoft\\Speech\\Recognizers";
//...
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, gc_wszSpeechKey, 0, KEY_READ,
&hkeySpeech) == ERROR_SUCCESS)
Ключ считывается с помощью RegQueryValueExW.
Наконец, в примере показано, какие элементы управления установлены.
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++;
}
}