9
votes

Trouver toutes les fenêtres sur ordinateur de bureau à l'aide de uautomation .NET

J'essaie de trouver toutes les fenêtres de bureau à l'aide de l'uautomation .NET ou du cadre blanc. J'ai essayé:

1.) xxx

2.) xxx

the the ArgumentException. S'il vous plaît laissez-moi savoir s'il y a d'autres moyens de faire cela ...

MISE À JOUR / Réponse: Desktop.Instance.Windows (); fonctionne bien, sauf que cela jette une exception tout en débogage du code à l'aide de VS2010.


0 commentaires

3 Réponses :


7
votes

Utiliser arbrescope.children code> devrait fonctionner si vous souhaitez accéder aux éléments enfants immédiats du bureau:

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

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


0 commentaires

0
votes

C'est impossible au moyen de l'appel de la suite. Certains types de fenêtres sont disponibles uniquement en appelant Findwindow. Ceux-ci peuvent être une fenêtre enfant de la console MMC, à l'époque où la fenêtre principale de MMC est cachée et non disponible pour l'automatisation de l'UI. Existe-t-il un moyen d'obtenir un fil de fil de la fenêtre, au cas où la fenêtre n'est pas la fenêtre principale de l'application? La réponse est d'énumérer des threads (souvent les droits administratifs sont nécessaires) et calculez qui est le fil de la fenêtre de notre intérêt.

En règle générale, il ne semble aucun moyen disponible pour énumérer toutes les fenêtres que SPY ++. Par exemple, Get-uiaWindow appelle simplement FINDWindow si la recherche d'automatisation de l'interface utilisateur était infructueuse.


0 commentaires

2
votes

Un projet d'automatisation UI au travail utilise:

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


0 commentaires