rootElement-> FindFirst(...)无法找到Inspect看到的元素

时间:2014-09-29 21:10:09

标签: c++ windows microsoft-ui-automation

我正在尝试在Windows上找到服务窗口(Start-> Run-> Services.msc)中包含的列表项。列表项名为“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描述元素的详细信息:

MS Inspect Details

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

很奇怪,事实证明以管理员身份运行我的UIA客户端会看到该组件,但是以登录用户身份运行则不会。现在我可以提升我的流程,但我会继续研究这个问题,以获得更详细的解释。