0

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

IAccessible* accessibleObject;
AccessibleObjectFromWindow(hwnd, OBJID_CLIENT, IID_IAccessible, (void**)&accessibleObj);

问题是当我现在打电话时

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

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

我很困惑为什么会这样。我也尝试过使用“IEnumVARIANT”,但是即使树在“get_accChildCount”使用的集合中有 25 个项目,同样也没有发现任何子项。由于机器没有声卡,我还没有尝试查看 Microsoft Narrator 是否能够识别孩子,但希望尽快进行设置尝试。我的猜测是讲述人会找到孩子们,我错过了一些奇怪的把戏。

4

2 回答 2

1

对于基础设施控制,我遇到了同样的问题。如果您能够更改正在测试的应用程序,那么您有 2 个选项,否则我认为没有解决方案并且您被困住了。


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


b)联系基础设施客户支持,对我来说这只是一些版本问题,他们非常快速和自信。

于 2015-09-11T10:57:19.977 回答
0

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

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

于 2016-02-23T14:17:25.477 回答