Использование кэширования
В этом разделе содержится пример кода, в котором показано, как использовать возможности кэширования (или массовой выборки) дерева Microsoft модель автоматизации пользовательского интерфейса. В ней рассматриваются следующие темы:
- Получение свойств и шаблонов элементов управления в кэш
- Получение свойств и шаблонов элементов управления из кэша
- Связанные темы
Получение свойств и шаблонов элементов управления в кэш
В следующем примере кода показана функция, которая извлекает элементы из элемента управления списком и кэширует шаблон элемента управления SelectionItem и свойство Name для каждого элемента. По умолчанию элементы списка возвращаются с полной ссылкой, чтобы все текущие свойства по-прежнему были доступны.
// 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;
}
Получение свойств и шаблонов элементов управления из кэша
В следующем коде показано, как получить свойства и шаблоны элементов управления из кэша. Он извлекает шаблон элемента управления SelectionItem и свойство Name для элемента списка.
// 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;
}
Связанные темы
-
Основные понятия
-
Практические руководства для клиентов модель автоматизации пользовательского интерфейса