在 C# Winforms 应用程序中自动化 Infragistics UltraTree 控件时,我发现 UltraTree 实现了 AccessibleObject 模型 (MSAA)。通过将从 spy++ 中获取的 hwnd 放入
,我能够成功获取 IAccessible 接口(interface)IAccessible* accessibleObject;
AccessibleObjectFromWindow(hwnd, OBJID_CLIENT, IID_IAccessible, (void**)&accessibleObj);
问题是当我现在调用
long childCount;
accessibleObj->get_accChildCount(&childCount);
我得到的结果是零。通过查看 UltraTree 源代码,我注意到它的子计数实现不应返回零(通过使用 windbg 检查内部代码中使用的字段进行验证)。所有其他 MSAA 函数似乎都正常工作(例如“accLocation”)。
我很困惑为什么会这样。我也尝试过使用“IEnumVARIANT”,但同样没有找到 child ,即使树在“get_accChildCount”使用的集合中有 25 个项目。我还没有尝试查看 Microsoft Narrator 是否能够识别 child ,因为机器没有声卡,但希望尽快进行设置以进行尝试。我的猜测是旁白会找到 children ,我错过了一些奇怪的把戏。
最佳答案
我在基础设施控制方面遇到了同样的问题。 如果您能够更改被测应用程序,您有 2 个选择,否则我认为没有解决方案并且您被困住了。
a) 覆盖您的 UltraTree 的 AutomationPeer 实现,因此只需创建您自己的 CustomizedUltraTree。这是有关此主题的有用链接 Docu
b) 联系 infragistics 客户支持,对我来说这只是一些版本控制问题,他们非常迅速和自信。
关于c++ - MSAA UI Automation get_accChildCount 在 Winforms 中错误地为 Infragistics UltraTree 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32504150/