UI オートメーション要素の取得

このトピックでは、UI 要素の IUIAutomationElement インターフェイスを取得するさまざまな方法について説明します。

IUIAutomationElement は、UI オートメーション ドキュメント コンテンツ クライアント サンプル アプリで使用されます。

Root 要素

IUIAutomation::GetFocusedElement などのメソッドを使用して要素を直接取得できますが、一部のクライアント アプリケーションでは、UI オートメーション ツリーと呼ばれる要素の階層構造のビューが必要です。 この階層のルート要素はデスクトップです。 この要素は、 IUIAutomation::GetRootElement メソッドまたは IUIAutomation::GetRootElementBuildCache メソッドを使用して取得できます。 これらのメソッドはどちらも 、IUIAutomationElement インターフェイス ポインターを取得します。 IUIAutomationElement::FindFirstFindAll などのメソッドを使用して、子孫要素を検索できます。

Note

一般に、ルート要素の直接の子のみを取得する必要があります。 子孫の検索では、数百または数千の要素を反復処理できます。 下位レベルの特定の要素を取得しようとする場合、アプリケーション ウィンドウから、または下位レベルのコンテナーから検索を開始する必要があります。

 

条件

UI オートメーション要素の取得に使用するほとんどの手法では、条件を指定する必要があります。 条件は、取得する要素を定義する条件のセットです。 条件は、 IUIAutomationCondition インターフェイスによって表されます。

最も単純な条件は true 条件です。これは、検索スコープ内のすべての要素を返すように指定する定義済みのオブジェクトです。 false 条件は真の条件の逆であり、要素が見つからないため、あまり役に立ちません。 IUIAutomation::CreateTrueCondition を使用して、真の条件へのインターフェイスを取得できます。

IUIAutomation オブジェクトのプロパティとして使用できる他の 3 つの定義済み条件は、単独で使用することも、他の条件と組み合わせて使用することもできます。IUIAutomation::ContentViewConditionControlViewConditionRawViewCondition です。 単独で使用される RawViewCondition は、IUIAutomationElement::CurrentIsControlElement プロパティまたは CurrentIsContentElement プロパティによって要素をフィルター処理しないため、true 条件と同じです。

その他の条件は、プロパティ値を指定する条件オブジェクトから作成されます。 たとえば、プロパティ条件では、要素が有効であること、または特定のコントロール パターンがサポートされていることを指定できます。

ブールロジックを使用する条件は、 IUIAutomation::CreateAndConditionCreateOrConditionCreateNotCondition、および関連するメソッドを呼び出すことによって組み合わせることができます。

検索範囲

IUIAutomationElement::FindFirst または FindAll を使用して実行される検索には、スコープと開始場所が必要です。

Note

これら 2 つのメソッドに関するコメントは、 IUIAutomationElement::FindFirstBuildCacheFindAllBuildCache にも適用されます。

 

スコープは、検索する開始位置の周りのスペースを定義します。 これには、要素自体、その兄弟、その親、その直接の子、およびその子孫が含まれる場合があります。 Find メソッドは Microsoft UI オートメーション ツリーの検索をサポートしていません。つまり、先祖要素の検索はサポートされていません。

検索のスコープは、 TreeScope 列挙型の値のビットごとの組み合わせによって定義されます。

既知の要素の検索

名前、オートメーション ID、またはその他のプロパティまたはプロパティの組み合わせによって識別される既知の要素を見つけるには、 IUIAutomationElement::FindFirst メソッドを使用するのが最も簡単です。 検索対象の要素がアプリケーション ウィンドウの場合、検索の開始点はルート要素になります。

UI オートメーション要素を検索するこの方法は、自動化されたシナリオ テストの最も有用な方法になります。

know 要素を検索する方法を示すコード例については、「 名前による要素の検索」を参照してください。

サブツリー内の要素の検索

特定の条件を満たし、既知の要素に関連するすべての要素を検索するには、既知の要素で IUIAutomationElement::FindAll を呼び出します。 たとえば、リストまたはメニューからリスト項目またはメニュー項目を取得したり、ダイアログ ボックス内のすべてのコントロールを識別したりするには、このメソッドを使用します。

サブツリー内の要素を検索する方法を示すコード例については、「 関連する要素の検索」を参照してください。

サブツリーのウォーク

クライアントで使用できるアプリケーションに関する知識がない場合は、 IUIAutomationTreeWalker を使用して、関心のあるすべての要素のサブツリーを構築できます。 たとえば、フォーカスが変更されたイベントに応答して、クライアントがこれを行う場合があります。つまり、アプリケーションまたはコントロールが入力フォーカスを受け取ると、UI オートメーション クライアントは子と、おそらくフォーカスされた要素のすべての子孫を調べます。

UI オートメーション ツリーを歩くことはリソースを大量に消費していることに注意してください。 IUIAutomationElement::FindFirstFindAll、または BuildUpdatedCache メソッドを使用できない場合にのみ、ツリーをウォークします。

カスタム条件を IUIAutomation::CreateTreeWalker に渡すことによって独自のツリー ウォーカーを定義することも、基本 IUIAutomation のプロパティとして定義されている次の定義済みオブジェクトのいずれかを使用することもできます。

Object 目的
ContentViewWalker IUIAutomationElement::CurrentIsContentElement プロパティが TRUE の要素のみを検索します。
ControlViewWalker IUIAutomationElement::CurrentIsControlElement プロパティが TRUE の要素のみを検索します。
RawViewWalker すべての要素を検索します。

 

IUIAutomationTreeWalker を取得したら、IUIAutomationTreeWalker::GetXxx メソッドを呼び出してサブツリーの要素を移動し、歩き始める要素を渡します。

IUIAutomationTreeWalker::Normalize メソッドは、ビューの一部ではない別の要素からサブツリー内の要素に移動するために使用できます。 たとえば、 IUIAutomation::ContentViewWalker を使用してサブツリーのビューを作成するとします。 アプリケーションは、スクロール バーが入力フォーカスを受け取ったという通知を受け取ります。 スクロール バーはコンテンツ要素ではないため、サブツリーのビューには存在しません。 ただし、スクロール バーを表す IUIAutomationElementIUIAutomationTreeWalker::Normalize に渡し、コンテンツ ビュー内の最も近い先祖を取得できます。

IUIAutomationTreeWalker インターフェイスの使用方法を示すコード例については、「UI オートメーション ツリーをウォークする方法」を参照してください。

要素を取得する別の方法

検索とナビゲーションに加えて、次の方法で IUIAutomationElement を取得できます。

イベントから

アプリケーションが UI オートメーション イベントを受信すると、イベント ハンドラーに渡されるソース オブジェクトは IUIAutomationElement によって表されます。 たとえば、フォーカス変更イベントをサブスクライブする場合、 IUIAutomationFocusChangedEventHandler に渡されるソースは、フォーカスを受け取った要素です。 詳細については、「UI オートメーション イベントのサブスクライブ」を参照してください。

ポイントから

画面座標 (カーソル位置など) から IUIAutomationElement を取得するには、 IUIAutomation::ElementFromPoint メソッドを使用します。

ウィンドウ ハンドルから

HWND から IUIAutomationElement を取得するには、IUIAutomation::ElementFromHandle メソッドを使用します。

フォーカスされたコントロールから

フォーカスされたコントロールを表す IUIAutomationElement を取得するには、 IUIAutomation::GetFocusedElement メソッドを使用します。

UI オートメーション ツリーの概要

ドキュメント コンテンツ クライアント サンプル アプリUI オートメーション