2009-08-18 4 views
0

Unsere Anwendung hat viele Steuerelemente, die dynamisch erstellt werden. Ein Navigationsbereich enthält beispielsweise Gruppen von Links, die sich ändern, wenn der Benutzer durch die App navigiert. Wenn ich AccExplorer das erste Mal benutze, um diese Links auszuwählen, findet es sie perfekt. Nachdem ich jedoch zu einer anderen Seite navigiert bin, kann AccExplorer die Links im aktualisierten Navigationsfenster nicht sehen. Tatsächlich erscheinen die alten Link-Steuerelemente immer noch in der AccExplorer-Baumhierarchie und wenn ich darauf klicke, hebt AccExplorer Bereiche des Desktops hervor, die außerhalb der Grenzen des tatsächlichen Fensters unserer Anwendung liegen.AccExplorer findet keine neuen Steuerelemente/denkt, dass alte Steuerelemente noch vorhanden sind

Die Steuerelemente haben sich geändert, aber AccExplorer erkennt sie nicht. Es denkt immer noch, dass die Hierarchie die gleiche ist.

Was ich merkwürdig finde, ist, dass das Schließen von AccExplorer und das Öffnen einer neuen Instanz von AccExplorer zu denselben Ergebnissen führt. Wenn ich das neue Navigationssteuerelement mit AccExplorer auswähle, sieht es die neuen Verbindungen nicht. Es erstellt die alte Hierarchie mit den alten Links neu. Die einzige Möglichkeit, die neuen Links zu sehen, ist, wenn ich unsere Anwendung schließe, unsere Anwendung erneut öffne, manuell zur neuen Seite navigiere und dann die Steuerelemente mit AccExplorer auswähle.

Die Navigationssteuerung ist eine DevExpress-Steuerung. Betriebssystem ist WinXP. AccExplorer 2.0. Ich würde lieber UIAutomation verwenden, aber nicht alle DevExpress-Steuerelemente unterstützen UIAutomation. Wir versuchen MSAA zu nutzen, um diese Lücken zu schließen.

Antwort

0

folgen ...

Mit UISpy Ich bin in der Lage ein Steuerelement namens LeftNavExplorerBarGroups zu finden, die AccExplorer nicht sehen kann. Ich kann UIAutomation verwenden, um das Fensterhandle des Steuerelements abzurufen, und dann das Handle verwenden, um das IAccessible-Objekt mit MSAALayer zu finden. Die Tatsache, dass AccExplorer dieses Steuerelement nicht sehen kann und dass der accName null ist, machte es sehr schwierig herauszufinden, wie man die benötigten Steuerelemente findet. (Hinweis: MSAA kommt von Arshad - http://www.codeproject.com/KB/winsdk/MSAA_UI_Automation.aspx)

AutomationElement a, b; 
Process p; 
Process[] existingProcesses; 
IAccessible c; 

existingProcesses = Process.GetProcessesByName("OurApp"); 
if (existingProcesses.Length > 0) { 
    p = existingProcesses[0]; 
    a = AutomationElement.FromHandle(p.MainWindowHandle); 
    b = a.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, "LeftNavExplorerBarGroups")); 
    c = MSAA.GetAccessibleObjectFromHandle(new IntPtr(b.Current.NativeWindowHandle)); 
} 
Verwandte Themen