IRawElementProviderSimple
COM公式ドキュメント
単純な UI 要素を公開するメソッドとプロパティを定義します。
解説(Remarks)
このインターフェイスは、次のものに実装できます。
- ボタンなどの単純な UI 要素向けの UI Automation プロバイダー。
- 既にプロバイダーを持つ UI 要素に対して、プロパティやコントロールパターンを追加またはオーバーライドするプロバイダー。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Microsoft UI Automation プロバイダーの種類を指定します。たとえば、クライアント側 (プロキシ) プロバイダーであるか、サーバー側プロバイダーであるかを示します。
| pRetVal | ProviderOptions* | out | プロバイダーの特性を表す ProviderOptions 値を受け取る出力ポインタである。 |
解説(Remarks)
このメソッドは、ProviderOptions_ServerSideProvider または ProviderOptions_ClientSideProvider のいずれかを返す必要があります。
UI Automation は、さまざまな種類のプロバイダーを異なる方法で処理します。 たとえば、サーバー側プロバイダーからのイベントは、リッスンしているすべてのクライアントにブロードキャストされますが、 クライアント側 (プロキシ) プロバイダーからのイベントはクライアント内にとどまります。
例
次の例では、サーバー側 UI Automation プロバイダー向けにこのメソッドを実装します。
HRESULT STDMETHODCALLTYPE Provider::get_ProviderOptions( ProviderOptions* pRetVal )
{
*pRetVal = ProviderOptions_ServerSideProvider;
return S_OK;
}
Microsoft UI Automation 要素上のコントロールパターンをサポートするオブジェクトへのポインターを取得します。
| patternId | UIA_PATTERN_ID | in | コントロールパターンの識別子。コントロールパターン ID の一覧については、Control Pattern Identifiers を参照してください。 |
| pRetVal | IUnknown** | out | コントロールパターンをサポートするオブジェクトへのポインターを受け取ります。 コントロールパターンがサポートされていない場合は NULL を受け取ります。 このパラメーターは初期化されずに渡されます。 |
戻り値
Microsoft UI Automation プロバイダーがサポートするプロパティの値を取得します。
| propertyId | UIA_PROPERTY_ID | in | プロパティ識別子。プロパティ ID の一覧については、Property Identifiers を参照してください。 |
| pRetVal | VARIANT* | out | プロパティの値を受け取ります。このプロバイダーがプロパティをサポートしていない場合は VT_EMPTY を受け取ります。 このパラメーターは初期化されずに渡されます。「解説」を参照してください。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
プロバイダーが propertyId プロパティをサポートしていない場合、プロバイダーは pRetVal->vt を VT_EMPTY に設定し、S_OK を返す必要があります。
解説(Remarks)
プロバイダーがプロパティ値を明示的に隠している場合 (つまり、プロバイダーがそのプロパティを提供せず、要求を他のプロバイダーに引き渡さない場合)、 UiaGetReservedNotSupportedValue 関数を使用して取得したポインターを返す必要があります。例:
pRetVal->vt = VT_UNKNOWN;
UiaGetReservedNotSupportedValue(&pRetVal->punkVal);
double 型の UI Automation プロパティは、非数 (NaN) 値をサポートします。NaN 値を返す場合、浮動小数点例外が有効になっているときに例外が発生しないよう、プロバイダーはクワイエット (非シグナル) NaN を返す必要があります。次の例は、クワイエット NaN の作成方法を示します。
ULONGLONG ulNaN = 0xFFFFFFFFFFFFFFFF;
*pRetVal = *reinterpret_cast<double*>(&ulNaN);
または、標準 C++ ライブラリの次の関数を使用することもできます。
numeric_limits<double>::quiet_NaN( )
例
次の例では、さまざまなプロパティ値を返します。UiaIds 構造体には プロパティ識別子が含まれます。その初期化方法については、UiaLookupId を参照してください。
HRESULT STDMETHODCALLTYPE Provider::GetPropertyValue(PROPERTYID propertyId,
VARIANT* pRetVal)
{
if (propertyId == UiaIds.ControlTypeProperty)
{
pRetVal->vt = VT_I4;
pRetVal->lVal = UiaIds.ButtonControlType;
}
// The Name property normally comes from the Caption property of the
// control window, if it has one. The Name is overridden here for the
// sake of illustration.
else if (propertyId == UiaIds.NameProperty)
{
pRetVal->vt = VT_BSTR;
pRetVal->bstrVal = SysAllocString(L"ColorButton");
}
else
{
pRetVal->vt = VT_EMPTY;
// UI Automation will attempt to get the property from the host
//window provider.
}
return S_OK;
}
この要素のホストプロバイダーを指定します。
| pRetVal | IRawElementProviderSimple** | out | この要素のホストプロバイダー(通常はウィンドウプロバイダー)を表す IRawElementProviderSimple を受け取る出力ポインタである。 |
解説(Remarks)
このプロパティは、通常、カスタムコントロールのウィンドウに対応する Microsoft UI Automation プロバイダーです。 UI Automation は、このプロバイダーをカスタムプロバイダーと組み合わせて使用します。たとえば、要素のランタイム識別子は 通常、ホストプロバイダーから取得されます。
ホストプロバイダーは、次の場合に返す必要があります。要素がフラグメントルートである場合、 要素が単純な要素 (プッシュボタンなど) である場合、およびプロバイダーが再配置プレースホルダーである場合 (詳細については、Provider Repositioning を参照してください)。 それ以外の場合、このプロパティは NULL にする必要があります。
例
次の例では、このプロバイダーが提供するコントロールをホストするウィンドウのホストプロバイダーを返します。
HRESULT STDMETHODCALLTYPE Provider::get_HostRawElementProvider(IRawElementProviderSimple** pRetVal)
{
return UiaHostProviderFromHwnd(controlHWnd, pRetVal);
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IRawElementProviderSimple "{D6DD68D1-86FD-4332-8666-9ABEDEA2D24C}" #usecom global IRawElementProviderSimple IID_IRawElementProviderSimple "{}" #comfunc global IRawElementProviderSimple_get_ProviderOptions 3 var #comfunc global IRawElementProviderSimple_GetPatternProvider 4 int,sptr #comfunc global IRawElementProviderSimple_GetPropertyValue 5 int,var #comfunc global IRawElementProviderSimple_get_HostRawElementProvider 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IRawElementProviderSimple "{D6DD68D1-86FD-4332-8666-9ABEDEA2D24C}" #usecom global IRawElementProviderSimple IID_IRawElementProviderSimple "{}" #comfunc global IRawElementProviderSimple_get_ProviderOptions 3 sptr #comfunc global IRawElementProviderSimple_GetPatternProvider 4 int,sptr #comfunc global IRawElementProviderSimple_GetPropertyValue 5 int,sptr #comfunc global IRawElementProviderSimple_get_HostRawElementProvider 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。