在 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 是否能够识别孩子,但希望尽快进行设置尝试。我的猜测是讲述人会找到孩子们,我错过了一些奇怪的把戏。