平板電腦平臺資訊範例
此程式會檢查 MicrosoftTablet PC 和 Touch Technology 核心元件是否存在和設定。 它會決定是否在作業系統中啟用平板電腦群組件、列出核心控制項的名稱和版本資訊,以及預設手寫和語音辨識器。
應用程式會使用 GetSystemMetrics Windows API,傳入SM_TABLETPC,以判斷應用程式是否在平板電腦上執行。 SM_TABLETPC定義于 WinUser.h 中。
特別感興趣的是應用程式使用辨識器集合來提供預設辨識器的相關資訊。 嘗試使用辨識器集合和辨識器物件之前,應用程式會測試其成功建立。
單元
使用可重新散發的合併模組,平板電腦平臺 API 的某些部分可能安裝在非平板電腦版本和 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++;
}
}