Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This topic contains example code that shows how to find a UI elements in the UI Automation tree.
Finding an Element by Name
The following example finds the Microsoft UI Automation element that has the specified name and is a child of the desktop window.
IUIAutomationElement* GetTopLevelWindowByName(LPWSTR windowName)
{
if (windowName == NULL)
{
return NULL;
}
VARIANT varProp;
varProp.vt = VT_BSTR;
varProp.bstrVal = SysAllocString(windowName);
if (varProp.bstrVal == NULL)
{
return NULL;
}
IUIAutomationElement* pRoot = NULL;
IUIAutomationElement* pFound = NULL;
// Get the desktop element.
HRESULT hr = g_pAutomation->GetRootElement(&pRoot);
if (FAILED(hr) || pRoot == NULL)
goto cleanup;
// Get a top-level element by name, such as "Program Manager"
IUIAutomationCondition* pCondition;
hr = g_pAutomation->CreatePropertyCondition(UIA_NamePropertyId, varProp, &pCondition);
if (FAILED(hr))
goto cleanup;
pRoot->FindFirst(TreeScope_Children, pCondition, &pFound);
cleanup:
if (pRoot != NULL)
pRoot->Release();
if (pCondition != NULL)
pCondition->Release();
VariantClear(&varProp);
return pFound;
}
Finding Related Elements
The following example function returns a collection of all enabled buttons that are children of the specified element.
IUIAutomationElementArray* GetEnabledButtons(IUIAutomationElement* pParent)
{
if (pParent == NULL)
{
return NULL;
}
IUIAutomationCondition* pButtonCondition = NULL;
IUIAutomationCondition* pEnabledCondition = NULL;
IUIAutomationCondition* pCombinedCondition = NULL;
IUIAutomationElementArray* pFound = NULL;
// Create a property condition for the button control type.
VARIANT varProp;
varProp.vt = VT_I4;
varProp.lVal = UIA_ButtonControlTypeId;
g_pAutomation->CreatePropertyCondition(UIA_ControlTypePropertyId, varProp, &pButtonCondition);
if (pButtonCondition == NULL)
goto cleanup;
// Create a property condition for the enabled property.
varProp.vt = VT_BOOL;
varProp.boolVal = VARIANT_TRUE;
g_pAutomation->CreatePropertyCondition(UIA_IsEnabledPropertyId, varProp, &pEnabledCondition);
if (pEnabledCondition == NULL)
goto cleanup;
// Combine the conditions.
g_pAutomation->CreateAndCondition(pButtonCondition, pEnabledCondition, &pCombinedCondition);
if (pCombinedCondition == NULL)
goto cleanup;
// Find the matching elements. Note that if the scope is changed to TreeScope_Descendants,
// system buttons on the caption bar will be found as well.
pParent->FindAll(TreeScope_Children, pCombinedCondition, &pFound);
cleanup:
if (pButtonCondition != NULL)
pButtonCondition->Release();
if (pEnabledCondition != NULL)
pEnabledCondition->Release();
if (pCombinedCondition != NULL)
pCombinedCondition->Release();
return pFound;
}
Related topics