Работая над автоматизацией элемента управления Infragistics UltraTree в приложении C# Winforms, я обнаружил, что UltraTree реализует модель AccessibleObject (MSAA). Мне удалось успешно захватить интерфейс IAccessible, поместив hwnd, захваченный из spy++, в
IAccessible* accessibleObject;
AccessibleObjectFromWindow(hwnd, OBJID_CLIENT, IID_IAccessible, (void**)&accessibleObj);
Проблема в том, что когда я сейчас звоню
long childCount;
accessibleObj->get_accChildCount(&childCount);
Результат, который я получаю, равен нулю. Глядя на исходный код UltraTree, я заметил, что его реализация счетчика дочерних элементов не должна возвращать ноль (проверено с помощью windbg для проверки полей, используемых во внутреннем коде). Все остальные функции MSAA работают правильно (например, accLocation).
Я в тупике, почему это так. Я также пытался использовать «IEnumVARIANT», но это также не нашло дочерних элементов, хотя дерево имеет 25 элементов в коллекции, которую использует «get_accChildCount». Я еще не пытался узнать, смог ли Microsoft Narrator идентифицировать дочерних элементов, поскольку на машине нет звуковой карты, но надеюсь, что скоро смогу это сделать. Я предполагаю, что Рассказчик найдет детей, и есть какой-то странный трюк, который я упускаю.