IRawElementProviderWindowlessSite::GetRuntimeIdPrefix 方法 (uiautomationcore.h)
检索对无窗口 Microsoft ActiveX 控件站点唯一的 Microsoft UI 自动化运行时 ID。
语法
HRESULT GetRuntimeIdPrefix(
[out, retval] SAFEARRAY **pRetVal
);
参数
[out, retval] pRetVal
类型: SAFEARRAY**
接收运行时 ID。
返回值
类型: HRESULT
如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。
注解
UI 自动化片段必须实现 IRawElementProviderFragment::GetRuntimeId 方法才能返回片段的唯一 ID。 对于无窗口 ActiveX 控件来说,这很困难,该控件必须能够在 ActiveX 控件容器中的其他无窗口控件中标识自己是唯一的。 若要解决此问题,无窗口站点应通过形成包含常量 UiaAppendRuntimeId 的 SAFEARRAY,后跟此无窗口站点唯一的整数值来实现 GetRuntimeIdPrefix 方法。
然后,该片段可以追加一个相对于无窗口 ActiveX 控件中所有其他片段唯一的整数值,并将其返回到客户端。
例如,站点可能会返回包含以下内容的 SAFEARRAY: { UiaAppendRuntimeId, 3 }
。 这可能表示容器中的第三个 ActiveX 控件。 然后,片段提供程序的 GetRuntimeId 方法可以形成包含以下内容的 SAFEARRAY: { UiaAppendRuntimeId, 3, 5 }
。 这可能表示 ActiveX 容器中的第五个片段。 整个 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) |