IRawElementProviderWindowlessSite::GetRuntimeIdPrefix メソッド (uiautomationcore.h)

ウィンドウレスの Microsoft ActiveX コントロール サイトに固有の Microsoft UI オートメーション ランタイム ID を取得します。

構文

HRESULT GetRuntimeIdPrefix(
  [out, retval] SAFEARRAY **pRetVal
);

パラメーター

[out, retval] pRetVal

種類: SAFEARRAY**

ランタイム ID を受け取ります。

戻り値

型: HRESULT

このメソッドは、成功すると S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。

注釈

フラグメントの一意の ID を返すには、UI オートメーション フラグメントで IRawElementProviderFragment::GetRuntimeId メソッドを実装する必要があります。 これは、ウィンドウレス ActiveX コントロールでは困難であり、ActiveX コントロール コンテナー内の他のウィンドウレス コントロールの中で一意であることを識別できる必要があります。 この問題を解決するには、ウィンドウレス サイトで GetRuntimeIdPrefix メソッドを実装し、定数 UiaAppendRuntimeId を含む SAFEARRAY を形成し、その後にこのウィンドウレス サイトに一意の整数値を指定する必要があります。

その後、フラグメントは、ウィンドウレス ActiveX コントロール内の他のすべてのフラグメントに対して一意の整数値を追加し、クライアントに返すことができます。

たとえば、サイトは、次の内容を含む SAFEARRAY を返す場合があります。 { UiaAppendRuntimeId, 3 } これは、コンテナー内の 3 番目の ActiveX コントロールを表している可能性があります。 フラグメント プロバイダーの GetRuntimeId メソッドは、次の内容を含む SAFEARRAY を形成できます。 { UiaAppendRuntimeId, 3, 5 } これは、ActiveX コンテナー内の 5 番目のフラグメントを表している可能性があります。 SAFEARRAY 全体は、ActiveX コントロール コンテナー全体に対する一意の ID になります。

プロバイダーは通常、 GetRuntimeId メソッドの処理の一環としてこのメソッドを呼び出します。

次の C++ コード例は 、GetRuntimeIdPrefix メソッドを実装する方法を示しています。

IFACEMETHODIMP CProviderWindowlessSite::GetRuntimeIdPrefix(   
     SAFEARRAY **ppsaPrefix)   
{   
    if (ppsaPrefix == NULL) 
    {
        return E_INVALIDARG;
    }

    // m_siteIndex is the index of the windowless control's
    // site. It is defined by the control container.
    int rId[] = { UiaAppendRuntimeId, m_siteIndex };
    SAFEARRAY *psa = SafeArrayCreateVector(VT_I4, 0, 2);  
    if (psa == NULL)
    {
        return E_OUTOFMEMORY;
    }

    for (LONG i = 0; i < 2; i++)
    {
        SafeArrayPutElement(psa, &i, (void*)&(rId[i]));
    }

    *ppsaPrefix = psa;  
    return S_OK;  
}  

要件

要件
サポートされている最小のクライアント Windows 8 [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー uiautomationcore.h (UIAutomation.h を含む)

こちらもご覧ください

IRawElementProviderWindowlessSite