Share via


Verwenden der Zwischenspeicherung

Dieses Thema enthält Beispielcode, der zeigt, wie die Funktionen zum Zwischenspeichern (oder Massenabrufen) der Microsoft Benutzeroberflächenautomatisierung-Struktur verwendet werden. Es werden die folgenden Themen behandelt:

Abrufen von Eigenschaften und Steuerelementmustern in den Cache

Das folgende Codebeispiel zeigt eine Funktion, die Elemente aus einem Listensteuerelement abruft und das SelectionItem-Steuerelementmuster und die Name-Eigenschaft für jedes Element zwischenspeichert. Standardmäßig werden die Listenelemente mit einem vollständigen Verweis zurückgegeben, sodass alle aktuellen Eigenschaften weiterhin verfügbar sind.

// Given a list element, caches a control pattern and a property for
// all the list items.
IUIAutomationElementArray* FindAndCacheListItems(IUIAutomationElement* pList)
{
    if (pList == NULL)
        return NULL;
    
    IUIAutomationCondition* pCondition = NULL;
    IUIAutomationCacheRequest* pCacheRequest = NULL;
    IUIAutomationElementArray* pFound = NULL;

    HRESULT hr = g_pAutomation->CreateTrueCondition(&pCondition);
    if (FAILED(hr))
        goto cleanup;

    hr = g_pAutomation->CreateCacheRequest(&pCacheRequest);
    if (FAILED(hr))
        goto cleanup;

    hr = pCacheRequest->AddPattern(UIA_SelectionItemPatternId);
    if (FAILED(hr))
        goto cleanup;

    hr = pCacheRequest->AddProperty(UIA_NamePropertyId);
    if (FAILED(hr))
        goto cleanup;

    pList->FindAllBuildCache(TreeScope_Children, pCondition, pCacheRequest, &pFound);
    
cleanup:
    if (pCondition != NULL)
        pCondition->Release();

    if (pCacheRequest != NULL)
        pCacheRequest->Release();

    return pFound;
}

Abrufen von Eigenschaften und Steuerelementmustern aus dem Cache

Der folgende Code veranschaulicht, wie Eigenschaften und Steuerelementmuster aus dem Cache abgerufen werden. Es ruft das SelectionItem-Steuerelementmuster und die Name-Eigenschaft für ein Listenelement ab.

// Demonstrates retrieval of cached properties from a list item
// obtained in FindAndCacheListItems.
HRESULT GetCachedListItem(IUIAutomationElement* pItem)
{           
    if (pItem == NULL)
    {
        return E_INVALIDARG;
    }

    IUIAutomationSelectionItemPattern* pSelectionItemPattern;
    HRESULT hr = pItem->GetCachedPatternAs(UIA_SelectionItemPatternId, 
        IID_IUIAutomationSelectionItemPattern, (void**)&pSelectionItemPattern);
    if (pSelectionItemPattern != NULL)
    {
        // ... To do: Do something with the pattern.

        pSelectionItemPattern->Release();
    }

    // Retrieve a cached property.
    BSTR bstrName;
    hr = pItem->get_CachedName(&bstrName);
    if (SUCCEEDED(hr))
    {
        // ... To do: Do something with the property.

        // Clean up when done with name.
        SysFreeString(bstrName);
        bstrName = NULL;
    }

    BOOL isControl;

    // The following returns E_INVALIDARG because the property was not cached.
    // hr = pItem->get_CachedIsControlElement(&isControl);

    // The following is valid because we have a full reference to the object, therefore
    // we can get current properties. If the cache request had been made with 
    // AutomationElementMode_None, no current properties would be available from
    // this IUIAutomationElement.
    hr = pItem->get_CurrentIsControlElement(&isControl);
    return hr;
}

Konzept

Zwischenspeichern Benutzeroberflächenautomatisierung Eigenschaften und Steuerelementmustern

Vorgehensweisen für Benutzeroberflächenautomatisierung Clients