MSAA-Benutzeroberflächenautomatisierung get_accChildCount gibt für Infragistics UltraTree in Winforms fälschlicherweise 0 zurück

Während ich an der Automatisierung eines Infragistics UltraTree-Steuerelements in einer C # Winforms-Anwendung arbeitete, stellte ich fest, dass UltraTree das AccessibleObject-Modell (MSAA) implementierte. Ich konnte die IAccessible-Schnittstelle erfolgreich abrufen, indem ich das von spy ++ abgefragte hwnd in @ legt

IAccessible* accessibleObject;
AccessibleObjectFromWindow(hwnd, OBJID_CLIENT, IID_IAccessible, (void**)&accessibleObj);

Das Problem ist, dass, wenn ich jetzt @ anru

long childCount;
accessibleObj->get_accChildCount(&childCount);

Das Ergebnis, das ich zurück bekomme, ist Null. Als ich mir den UltraTree-Quellcode ansah, bemerkte ich, dass die Implementierung von child count nicht null zurückgeben sollte (überprüft durch Verwenden von windbg, um die im internen Code verwendeten Felder zu untersuchen). Alle anderen MSAA-Funktionen scheinen ordnungsgemäß zu funktionieren (z. B. 'accLocation').

Ich bin ratlos, warum dies der Fall wäre. Ich habe auch versucht, 'IEnumVARIANT' zu verwenden, aber das hat ebenfalls keine Kinder gefunden, obwohl der Baum 25 Elemente in der Sammlung hat, die 'get_accChildCount' verwendet. Ich habe noch nicht versucht, festzustellen, ob Microsoft Narrator die Kinder identifizieren konnte, da der Computer über keine Soundkarte verfügt. Ich vermute, der Erzähler findet die Kinder und es gibt einen seltsamen Trick, den ich vermisse.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage