首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法让MSAA的IAccessible遍历更快?

有没有办法让MSAA的IAccessible遍历更快?
EN

Stack Overflow用户
提问于 2012-06-19 22:47:11
回答 1查看 989关注 0票数 4

现在我有了这个C++函数(删除了安全检查和一些代码,使其更具可读性):

代码语言:javascript
复制
HRESULT WalkTreeWithAccessibleChildren(wstringstream *ss, IAccessible* pAcc, int depth)
{
    long childCount;
    long returnCount;   

    VARIANT* pArray = new VARIANT[childCount];
    hr = AccessibleChildren(pAcc, 0L, childCount, pArray, &returnCount);
    for (int x = 0; x < returnCount; x++) {
        VARIANT vtChild = pArray[x];
        Get the role and name of the component here
        // If it's an accessible object, get the IAccessible, and recurse.
        if (vtChild.vt == VT_DISPATCH) {
            IDispatch* pDisp = vtChild.pdispVal;
            IAccessible* pChild = NULL;
            hr = pDisp->QueryInterface(IID_IAccessible, (void**) &pChild);
            WalkTreeWithAccessibleChildren(ss, pChild, depth + 1);
    }
}

对于一些组件相对较少(200个左右)的程序,例如Paint.NET,这需要大约2秒的时间,有没有办法让这个函数更快,在一个COM调用中获得所有组件或类似的东西?

EN

回答 1

Stack Overflow用户

发布于 2012-06-23 00:53:32

这在一定程度上取决于你想要做什么。

如果要查找特定项目,有时可以使用导航(AccNavigate)来更快地找到项目,而不是浏览所有项目。

如果你真的需要得到所有的项目,后台线程工作得很好。

另一种选择是使用UIAutomation api,它仍然支持所有的IAccessible服务器,并且内置了更丰富的缓存和过滤功能。有关更多信息,请参阅MSDN for IUIAutomationCacheRequest及其方法TreeFilter和TreeScope。如果您在特定的项目案例中,它还可以搜索特定的项目。

可以将UIAutomation看作是IAccessible的超集。在Vista SP2和更高版本上可以使用UIAutomation。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11103505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档