Я пытаюсь найти элемент списка, содержащийся в окне служб (Пуск-> Выполнить-> Службы.msc) в Windows. Элемент списка называется «Arc Service» и его легко найти с помощью Inspect, но мой код не может его найти. Это относительно простой случай, я чувствую, что, должно быть, делаю что-то не так.
Код в вопросе:
VARIANT arcServiceNameVariant;
VariantInit(&arcServiceNameVariant);
arcServiceNameVariant.vt = VT_BSTR;
arcServiceNameVariant.bstrVal = L"Arc Service";
CComPtr<IUIAutomationCondition> arcServiceNameCondition;
hr = g_pAutomation->CreatePropertyCondition(UIA_NamePropertyId, arcServiceNameVariant, &arcServiceNameCondition.p);
if(SUCCEEDED(hr)) {
CComPtr<IUIAutomationElement> arcServiceElement;
hr = rootElement->FindFirst(TreeScope_Descendants, arcServiceNameCondition, &arcServiceElement.p);
if(SUCCEEDED(hr)) {
if(arcServiceElement.p) {
logInfo(L"Arc Service element found!");
}
} else {
logInfo(L"FindFirst failed!");
}
} else {
logInfo(L"Failed to create property condition!");
}
«Элемент Arc Service найден!» ветка никогда не вводится.
Вот подробности из Inspect, описывающие элемент:
Будем очень благодарны любой помощи. Спасибо!
Как ни странно, получается, что мой клиент UIA, работающий от имени администратора, видит компонент, а работающий как зарегистрированный пользователь — нет. Пока я могу улучшить свой процесс, но я продолжу исследовать проблему для более подробного объяснения.