Win32 API 日本語リファレンス
ホームUI.Accessibility › IRawElementProviderSimple

IRawElementProviderSimple

COM
IIDd6dd68d1-86fd-4332-8666-9abedea2d24c継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

単純な UI 要素を公開するメソッドとプロパティを定義します。

解説(Remarks)

このインターフェイスは、次のものに実装できます。

複雑な要素向けのプロバイダーは、IRawElementProviderFragment も実装する必要があり、 ルート要素である場合は IRawElementProviderFragmentRoot も実装する必要があります。

メソッド 4

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT get_ProviderOptions(ProviderOptions* pRetVal)

Microsoft UI Automation プロバイダーの種類を指定します。たとえば、クライアント側 (プロキシ) プロバイダーであるか、サーバー側プロバイダーであるかを示します。

pRetValProviderOptions*outプロバイダーの特性を表す ProviderOptions 値を受け取る出力ポインタである。

解説(Remarks)

このメソッドは、ProviderOptions_ServerSideProvider または ProviderOptions_ClientSideProvider のいずれかを返す必要があります。

UI Automation は、さまざまな種類のプロバイダーを異なる方法で処理します。 たとえば、サーバー側プロバイダーからのイベントは、リッスンしているすべてのクライアントにブロードキャストされますが、 クライアント側 (プロキシ) プロバイダーからのイベントはクライアント内にとどまります。

次の例では、サーバー側 UI Automation プロバイダー向けにこのメソッドを実装します。

HRESULT STDMETHODCALLTYPE Provider::get_ProviderOptions( ProviderOptions* pRetVal )
{
    *pRetVal = ProviderOptions_ServerSideProvider;
    return S_OK;
}    
vtbl 4 HRESULT GetPatternProvider(UIA_PATTERN_ID patternId, IUnknown** pRetVal)

Microsoft UI Automation 要素上のコントロールパターンをサポートするオブジェクトへのポインターを取得します。

patternIdUIA_PATTERN_IDinコントロールパターンの識別子。コントロールパターン ID の一覧については、Control Pattern Identifiers を参照してください。
pRetValIUnknown**outコントロールパターンをサポートするオブジェクトへのポインターを受け取ります。 コントロールパターンがサポートされていない場合は NULL を受け取ります。 このパラメーターは初期化されずに渡されます。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 5 HRESULT GetPropertyValue(UIA_PROPERTY_ID propertyId, VARIANT* pRetVal)

Microsoft UI Automation プロバイダーがサポートするプロパティの値を取得します。

propertyIdUIA_PROPERTY_IDinプロパティ識別子。プロパティ ID の一覧については、Property Identifiers を参照してください。
pRetValVARIANT*outプロパティの値を受け取ります。このプロバイダーがプロパティをサポートしていない場合は VT_EMPTY を受け取ります。 このパラメーターは初期化されずに渡されます。「解説」を参照してください。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

プロバイダーが propertyId プロパティをサポートしていない場合、プロバイダーは pRetVal->vtVT_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;
}
            
vtbl 6 HRESULT get_HostRawElementProvider(IRawElementProviderSimple** pRetVal)

この要素のホストプロバイダーを指定します。

pRetValIRawElementProviderSimple**outこの要素のホストプロバイダー(通常はウィンドウプロバイダー)を表す IRawElementProviderSimple を受け取る出力ポインタである。

解説(Remarks)

このプロパティは、通常、カスタムコントロールのウィンドウに対応する Microsoft UI Automation プロバイダーです。 UI Automation は、このプロバイダーをカスタムプロバイダーと組み合わせて使用します。たとえば、要素のランタイム識別子は 通常、ホストプロバイダーから取得されます。

ホストプロバイダーは、次の場合に返す必要があります。要素がフラグメントルートである場合、 要素が単純な要素 (プッシュボタンなど) である場合、およびプロバイダーが再配置プレースホルダーである場合 (詳細については、Provider Repositioning を参照してください)。 それ以外の場合、このプロパティは NULL にする必要があります。

次の例では、このプロバイダーが提供するコントロールをホストするウィンドウのホストプロバイダーを返します。

HRESULT STDMETHODCALLTYPE Provider::get_HostRawElementProvider(IRawElementProviderSimple** pRetVal)
{
    return UiaHostProviderFromHwnd(controlHWnd, pRetVal); 
}
            
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。