9

.NET UIAutomation OR White フレームワークを使用して、すべてのデスクトップ ウィンドウを見つけようとしています。私は試した :

1.)

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

2.)

            Desktop.Instance.Windows();

どちらも ArgumentException をスローします。他に方法があれば教えてください...

更新/回答: Desktop.Instance.Windows(); VS2010を使用してコードをデバッグしているときに例外がスローされることを除いて、正常に動作します。

4

3 に答える 3

8

TreeScope.Childrenデスクトップの直接の子要素にアクセスする場合は、を使用すると機能するはずです::

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

    foreach (AutomationElement element in winCollection)
        Console.WriteLine(element.Current.Name);
于 2012-04-17T20:54:22.533 に答える
2

作業中の UI 自動化プロジェクトでは、次のものを使用します。

List<White.Core.UIItems.WindowItems.Window> windows = WindowFactory.Desktop.DesktopWindows();
于 2012-05-01T20:27:28.117 に答える
0

FindAll呼び出しでは不可能です。一部のタイプのウィンドウは、FindWindowを呼び出すことによってのみ使用できます。mmcのメインウィンドウが非表示になっていて、UIオートメーションで使用できない場合、これらはMMCコンソールの子ウィンドウである可能性があります。ウィンドウがアプリケーションのメインウィンドウではない場合に、ウィンドウがオンになっているスレッドを取得する方法はありますか?答えは、スレッドを列挙し(多くの場合、管理者権限が必要です)、関心のあるウィンドウが属するスレッドを計算することです。

一般に、Spy ++のように、すべてのウィンドウを列挙する方法はないようです。たとえば、UIオートメーション検索が役に立たなかった場合、Get-UIAWindowは単にFindWindowを呼び出します。

于 2012-04-19T13:59:07.063 に答える