Cara Menemukan Elemen UI
Topik ini berisi contoh kode yang menunjukkan cara menemukan elemen UI di pohon Automation UI.
Menemukan Elemen menurut Nama
Contoh berikut menemukan elemen Microsoft UI Automation yang memiliki nama yang ditentukan dan merupakan anak dari jendela desktop.
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;
}
Menemukan Elemen Terkait
Contoh fungsi berikut mengembalikan kumpulan semua tombol yang diaktifkan yang merupakan turunan dari elemen yang ditentukan.
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;
}
Topik terkait
-
Konseptual
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk