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 控件容器中的其他无窗口控件中标识自己是唯一的。 若要解决此问题,无窗口站点应通过形成包含常量 UiaAppendRuntimeIdSAFEARRAY,后跟此无窗口站点唯一的整数值来实现 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)

另请参阅

IRawElementProviderWindowlessSite