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 を含む) |