2014-09-29 4 views
1

Я пытаюсь найти элемент списка, содержащийся в окне «Службы» («Пуск» - «Пуск» -> «Службы.msc») в Windows. Элемент списка называется «Arc Service» и его легко найти с помощью Inspect, но мой код не находит его. Это относительно простой случай, я чувствую, что должен делать что-то неправильно.rootElement-> FindFirst (...) не находит элемент, который видит 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 элемент найден!" ветвь никогда не вводится.

Вот подробности из Осмотреть описывающие элемент:

MS Inspect Details

Любая помощь будет принята с благодарностью. Благодаря!

ответ

1

Вполне понятно, что запуск моего клиента UIA, когда Администратор видит компонент, но работает, поскольку пользователь, которого не зарегистрировал пользователь, этого не делает. Пока я могу поднять свой процесс, но я продолжу исследование проблемы для более подробного объяснения.