IInputPanelInvocationConfiguration
COM公式ドキュメント
Windows ストアアプリが自動呼び出し動作を無効化(オプトアウト)できるようにします。
解説(Remarks)
クライアントは、タッチキーボードおよび手書き入力パネルに対して、呼び出しの前に、フォーカスのある編集コントロール内でユーザーがタップしたことを確認するよう要求できます。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
タッチキーボードが呼び出される前に、編集フィールド内での明示的なユーザーのタップを必須にします。
戻り値
RequireTouchInEditControl メソッドは常に S_OK を返します。
解説(Remarks)
RequireTouchInEditControl メソッドを呼び出すと、以降のすべてのフォーカス変更において、タッチキーボードが呼び出される前に編集フィールド内での明示的なユーザーのタップが必要になります。RequireTouchInEditControl メソッドは複数回呼び出すことができますが、この設定を元に戻す方法はありません。
この設定は、それを呼び出したプロセス内で実行されているウィンドウに対して発生するすべてのフォーカスイベントに適用されます。RequireTouchInEditControl メソッドは、それを呼び出した現在のプロセスへの所有権チェーンを持つ、別のプロセス内の所有ウィンドウには影響しません。
RequireTouchInEditControl メソッドは常に S_OK を返します。この API を使用した場合、IsUIBusy プロパティは効果を持ちません。この 2 つの操作モデルは、本質的に相互排他的です。
次のコードは、RequireTouchInEditControl メソッドの呼び出し方法を示しています。
#include <inputpanelconfiguration.h>
#include <inputpanelconfiguration_i.c>
IInputPanelInvocationConfiguration *pInputPanelInvocationConfiguration;
CoCreateInstance(CLSID_InputPanelConfiguration, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pInputPanelInvocationConfiguration));
pInputPanelInvocationConfiguration->RequireTouchInEditControl();
IsUIBusy を True に設定すると、タッチキーボードはアプリ内のフォーカス変更に基づいて視覚的な状態を変更しなくなります。ただし、物理キーボードの使用や手動での閉じる操作など、ユーザー操作による上書きに基づいて視覚的な状態を変更することは引き続き可能です。
IsUIBusy を False に設定すると、タッチキーボードは既定の動作を再開し、フォーカスを持つコントロールを同期的にクエリします。
次のコードは、IsUIBusy カスタム UI オートメーションプロパティの登録方法を示しています。
/* 03391bea-6681-474b-955c-60f664397ac6 */
DEFINE_GUID(
GUID_UIBusy,
0x03391bea, 0x6681, 0x474b, 0x95, 0x5c, 0x60, 0xf6, 0x64, 0x39, 0x7a, 0xc6);
UIAutomationPropertyInfo customPropertyInfo =
{
GUID_UIBusy,
L"IsUIBusy",
UIAutomationType_Bool
};
CComPtr<IUIAutomationRegistrar> spRegistrar;
hr = spRegistrar.CoCreateInstance(
CLSID_CUIAutomationRegistrar,
nullptr,
CLSCTX_INPROC_SERVER);
if (SUCCEEDED(hr))
{
PATTERNID customPropertyId;
hr = spRegistrar->RegisterProperty(&customPropertyInfo, &customPropertyId);
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IInputPanelInvocationConfiguration "{A213F136-3B45-4362-A332-EFB6547CD432}"
#usecom global IInputPanelInvocationConfiguration IID_IInputPanelInvocationConfiguration "{}"
#comfunc global IInputPanelInvocationConfiguration_RequireTouchInEditControl 3
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。