2012-04-17 6 views
6

Estoy tratando de encontrar todas las ventanas de escritorio usando .NET UIAutomation OR White framework. me trataron:Encontrar todas las ventanas en el escritorio usando UIAutomation .NET

1.)

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

2.)

  Desktop.Instance.Windows(); 

Tanto ArgumentException tiro. Háganme saber si hay otras formas de hacerlo ...

ACTUALIZACIÓN/RESPUESTA: Desktop.Instance.Windows(); funciona bien, excepto que arroja una excepción al depurar el código usando VS2010.

Respuesta

4

Usando TreeScope.Children debería funcionar si se desea acceder a los elementos secundarios inmediatos del escritorio ::

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

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

Es imposible por medio de la llamada FindAll. Algunos tipos de ventanas están disponibles solo llamando a FindWindow. Estas pueden ser una ventana secundaria de la consola MMC, en el momento en que la ventana principal de mmc está oculta y no disponible para la Automatización de la interfaz de usuario. ¿Hay alguna manera de obtener un hilo en el que esté la ventana, en caso de que la ventana no sea la ventana principal de la aplicación? La respuesta es enumerar los hilos (a menudo, se necesitan derechos administrativos) y calcular cuál es el hilo al que pertenece la ventana de nuestro interés.

En general, parece que no hay manera de enumerar todas las ventanas como lo hace con Spy ++. Por ejemplo, Get-UIAWindow simplemente llama a FindWindow si la búsqueda de Automatización de UI fue infructuosa.

1

un proyecto de automatización de la interfaz de usuario en el trabajo utiliza:

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