平板电脑平台信息示例

此程序检查 MicrosoftTablet 电脑和触控技术核心组件是否存在和配置。 它确定是否在操作系统中启用 Tablet PC 组件,列出核心控件的名称和版本信息以及默认手写和语音识别器。

应用程序使用传入SM_TABLETPC的 GetSystemMetrics Windows API 来确定应用程序是否在平板电脑上运行。 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++;
    }
}