如何从UI 自动化提供程序返回属性

本主题包含示例代码,这些代码演示 Microsoft UI 自动化 提供程序如何将 UI 元素的属性返回到客户端应用程序。

若要从提供程序检索属性值,UI 自动化调用提供程序实现的 IRawElementProviderSimple::GetPropertyValue 方法,传递要检索的属性的 ID 和指向 VARIANT 结构的指针。 如果提供程序支持指定的属性,则会将属性的数据类型和值复制到 VARIANT 结构中。 如果 不支持 属性,则提供程序将 VARIANT 结构的 vt 成员设置为 VT_EMPTY。

IFACEMETHODIMP Provider::GetPropertyValue(PROPERTYID propertyId, VARIANT* pRetVal)
{
    // The Name property is typically the same as the Caption property of the 
    // control window, if it has one. Here, the Name is overridden for the 
    // sake of illustration. 
    if (propertyId == UIA_NamePropertyId) 
    {
        pRetVal->vt = VT_BSTR;
        pRetVal->bstrVal = SysAllocString(L"Custom button");
    }
    
    else if (propertyId == UIA_ControlTypePropertyId) 
    {
        pRetVal->vt = VT_I4;
        pRetVal->lVal = UIA_ButtonControlTypeId; 
    }

    else if (propertyId == UIA_IsContentElementPropertyId) 
    {
        pRetVal->vt = VT_BOOL;
        pRetVal->lVal = TRUE; 
    }

    else if (propertyId == UIA_IsControlElementPropertyId) 
    {
        pRetVal->vt = VT_BOOL;
        pRetVal->lVal = TRUE; 
    }

    //
    // Return other properties as appropriate for the control type. 
    //

    else
    {
        pRetVal->vt = VT_EMPTY;
        // UI Automation will attempt to get the property from the  
        // provider for window that hosts the control.
    }
    return S_OK;
}

概念性

UI 自动化属性概述

UI 自动化提供程序的操作方法主题