Ho un controllo TreeView sul mio modulo e sto ricorsivamente passando attraverso gli elementi di un'altra finestra che inizia con la finestra stessa. Sto usando questo per trovare gli elementi:Automazione dell'interfaccia utente di Windows che non mostra tutti gli elementi figlio?
getRecursiveElements(AutomationElement parent)
{
children = parent.FindAll(TreeScope.Children, Condition.TrueCondition);
foreach (AutomationElement child in children)
{
addToTreeView(child);
getRecursiveElements(child);
}
}
In generale, il codice funziona abbastanza bene nella maggior parte dei casi. L'albero è popolato e ho un po 'di altro codice di supporto che mi permette di fare doppio clic, ad esempio, un elemento nella vista ad albero e evidenzierà quell'elemento nel modulo di destinazione.
Il problema che sto avendo è che, mentre si genera un albero impressionante, ci sono ancora alcuni elementi mancanti per alcuni programmi di destinazione.
Che motivo poteva esserci per questo, e c'è un modo per aggirare l'ostacolo? Se chiamo EnumChildWindows()
da user32.dll avremo lo stesso problema?
Puoi dare alcuni esempi dei tipi di elementi che sta saltando? E hai paragonato il tuo albero a quello prodotto dagli strumenti UISpy o Inspect dell'SDK? UIA ha un concetto di 'viste', che è un filtro che viene applicato in aggiunta alla condizione che si fornisce a Trova. Per impostazione predefinita, l'UIA filtra le cose che non sono elementi di contenuto, quindi se si enumera una listbox o listview, si otterrà solo la listbox, ma non le barre di scorrimento o l'intestazione. È questo il genere di cosa che ti manca o qualcos'altro? – BrendanMcK