c++ - MSAA UI Automation get_accChildCount 在 Winforms 中错误地为 Infragistics UltraTree 返回 0

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

在 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/

相关文章:

c# - Infragistics WebDataGrid 按列名 : VB. 从选定的行中获取值 net 到 C# 的转换

c++ - 动态转换的一些 'good use' 示例是什么?

c# - 在 this.Dispose() 之后使用 form.ShowDialog();

C++ Linux getpeername IP 系列

c# - 在一个表单中更改的 TextBox 上,使用事件和委托(delegate)更改另一个表单上的 GridView 内容

c# - 从 C# 调用 ActionScript 3 函数

localization - 软件翻译服务成本 - 大致想法

c# - Infragistics UltraWebTree SelectedNode 导致 HttpUnhandledException

c# - 将复杂结构编码到 C#

c++ - 如何在两个容器的元素之间执行成对二元运算?