MSAA UI自动化get_accChildCount在Winforms

时间:2015-09-10 14:07:50

标签: c++ winforms infragistics microsoft-ui-automation msaa

在C#Winforms应用程序中自动化Infragistics UltraTree控件时,我发现UltraTree实现了AccessibleObject模型(MSAA)。通过将从spy ++中抓取的hwnd放入

,我能够成功获取IAccessible接口
IAccessible* accessibleObject;
AccessibleObjectFromWindow(hwnd, OBJID_CLIENT, IID_IAccessible, (void**)&accessibleObj);

问题在于我现在打电话

long childCount;
accessibleObj->get_accChildCount(&childCount);

我回来的结果是零。通过查看UltraTree源代码,我注意到它的子计数实现不应该返回零(通过使用windbg来检查内部代码中使用的字段进行验证)。所有其他MSAA功能似乎都正常工作(例如'accLocation')。

我很难过为什么会这样。我也试过使用'IEnumVARIANT',但是同样没有孩子,即使树中有25个项目'get_accChildCount'使用了。我还没有试过看看微软讲述者是否已经能够识别这些孩子,因为这台机器没有声卡,但是希望能够尽快设置好。我的猜测是,讲述者会找到孩子们,并且有一些奇怪的伎俩我不知道。

2 个答案:

答案 0 :(得分:1)

我对infragistics控件有同样的问题。 如果您能够更改被测试的应用程序,您有2个选项,否则我认为没有解决方案而且您被困。

a)覆盖UltraTree的AutomationPeer实现,因此只需创建自己的CustomizedUltraTree。以下是此主题的有用链接Docu

b)联系infragistics客户支持,对我而言,这只是一些版本问题而且非常快速和自信。

答案 1 :(得分:0)

有点蹩脚的答案,但我最终发现通过在CLR下运行(翻转/ clr on),返回正确数量的孩子。所以字面上完全相同的代码,唯一的区别在于是否指定了/ clr编译器开关。我真的不想在CLR下运行此代码,所以这对我来说不是一个理想的解决方案,但它在技术上回答了我的问题。

我将不得不发布另一个问题,询问为什么会发生这种情况:(