2012-04-17 13 views
6

Sto cercando di trovare tutte le finestre del desktop usando .NET UIAutomation O White framework. ho provato:Trovare tutte le finestre sul desktop usando UIAutomation .NET

1.)

  AutomationElement rootElement = AutomationElement.RootElement; 
      var winCollection = rootElement.FindAll(TreeScope.Subtree, Condition.TrueCondition); 

2.)

  Desktop.Instance.Windows(); 

Entrambi tiro ArgumentException. Per favore fatemi sapere se ci sono altri modi per farlo ...

UPDATE/ANSWER: Desktop.Instance.Windows(); funziona bene eccetto per il fatto che genera un'eccezione durante il debugging del codice usando VS2010.

risposta

4

Utilizzando TreeScope.Children dovrebbe funzionare se si desidera accedere gli elementi figlio immediati del desktop ::

AutomationElement rootElement = AutomationElement.RootElement; 
    var winCollection = rootElement.FindAll(TreeScope.Children, Condition.TrueCondition); 

    foreach (AutomationElement element in winCollection) 
     Console.WriteLine(element.Current.Name); 
0

E 'impossibile per mezzo della chiamata FindAll. Alcuni tipi di finestre sono disponibili solo chiamando FindWindow. Queste possono essere una finestra figlia della console MMC, nel momento in cui la finestra principale di mmc è nascosta e non disponibile per l'automazione dell'interfaccia utente. C'è un modo per ottenere un thread in cui la finestra è attiva, nel caso in cui la finestra non sia la finestra principale dell'applicazione? La risposta è enumerare i thread (spesso sono necessari i diritti amministrativi) e calcolare quale è il thread a cui appartiene la finestra di nostro interesse.

Generalmente, non sembra esserci alcun modo per enumerare tutte le finestre come fa Spy ++. Ad esempio, Get-UIAWindow chiama semplicemente FindWindow se l'UI Automation search è infruttuoso.

1

un progetto di automazione interfaccia utente al lavoro usa:

List<White.Core.UIItems.WindowItems.Window> windows = WindowFactory.Desktop.DesktopWindows();