При работе над автоматизацией управления Infragistics UltraTree в приложении C# Winforms я обнаружил, что UltraTree реализовала модель AccessibleObject (MSAA). Я был в состоянии успешно захватить IAccessible интерфейс, поместив HWND схватил из шпиона ++ вMSAA UI Automation get_accChildCount Неправильно возвращает 0 для Infragistics UltraTree в Winforms
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-рассказ идентифицировать детей, поскольку на машине нет звуковой карты, но надеюсь, что скоро настроит эту попытку. Я предполагаю, что рассказчик найдет детей, и есть какой-то странный трюк, который мне не хватает.
Вы забыли [называть CoInitializeEx()] (http://stackoverflow.com/a/37505609/17034). –