クライアントの UI オートメーション プロパティ

メモメモ

このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージ UI Automation クラスを使用する .NET Framework 開発者を対象としています。UI Automationに関する最新情報については、「Windows Automation API: UI Automation (Windows オートメーション API: UI オートメーション)」を参照してください。

ここでは、UI オートメーション クライアント アプリケーションに公開されている UI Automation プロパティについて説明します。

AutomationElement オブジェクトのプロパティには、user interface (UI) 要素 (通常はコントロール) に関する情報が含まれます。 AutomationElement のプロパティは汎用です。つまり、コントロール型に固有ではありません。 これらのプロパティの多くは、AutomationElement.AutomationElementInformation 構造体で公開されます。

また、コントロール パターンもプロパティを持ちます。 コントロール パターンのプロパティは、パターンに固有です。 たとえば、ScrollPattern に含まれるプロパティを使用すると、ウィンドウを垂直方向または水平方向にスクロールできるかどうか、また、現在のビュー サイズおよびスクロール位置をクライアント アプリケーションで調べることができます。 コントロール パターンは、そのすべてのプロパティを構造体 (ScrollPattern.ScrollPatternInformation など) を介して公開します。

UI Automationプロパティは読み取り専用です。 コントロールのプロパティを設定するには、適切なコントロール パターンのメソッドを使用する必要があります。 たとえば、スクロール ウィンドウの位置の値を変更する場合は、Scroll を使用します。

パフォーマンスを向上させるために、AutomationElement オブジェクトを取得したときに、コントロールおよびコントロール パターンのプロパティ値をキャッシュできます。 詳細については、「UI オートメーション クライアントにおけるキャッシュ」を参照してください。

このトピックは、次のセクションで構成されています。

  • プロパティ ID
  • プロパティ条件
  • プロパティの取得
  • 既定のプロパティ値
  • プロパティ変更イベント
  • その他の AutomationElement プロパティ
  • 関連トピック

プロパティ ID

プロパティidentifiers (IDs) は、AutomationProperty オブジェクトにカプセル化されている一意の定数値です。 UI オートメーション クライアント アプリケーションは、これらの IDs を AutomationElement クラスまたは適切なコントロール パターン クラス (ScrollPattern など) から取得します。 UI オートメーション プロバイダーは、AutomationElementIdentifiers またはコントロール パターン識別子クラスの 1 つ (ScrollPatternIdentifiers など) からこれらを取得します。

AutomationProperty の数値 Id は、IRawElementProviderSimple.GetPropertyValue メソッドで照会するプロパティを識別するために、プロバイダーによって使用されます。 通常、クライアント アプリケーションで Id を調べる必要はありません。 ProgrammaticName は、デバッグおよび診断の目的のみに使用されます。

プロパティ条件

プロパティ IDs は、AutomationElement オブジェクトの検出に使用される PropertyCondition オブジェクトを構築する際に使用されます。 特定の名前を持つ AutomationElement や、すべての有効なコントロールなどを検出することもできます。 各 PropertyCondition では、AutomationProperty 識別子と、そのプロパティが一致する必要がある値を指定します。

詳細については、次のリファレンス トピックを参照してください。

プロパティの取得

AutomationElement のいくつかのプロパティと、コントロール パターン クラスのすべてのプロパティは、AutomationElement またはコントロール パターン オブジェクトの、Current プロパティまたは Cached プロパティの入れ子になったプロパティとして公開されます。

また、Cached または Current の構造体にはないプロパティを含む、任意の AutomationElement またはコントロール パターン プロパティは、次のいずれかのメソッドを使用して取得できます。

これらのメソッドを使用すると、パフォーマンスがわずかながら向上すると共に、すべてのプロパティにアクセスできます。

AutomationElement のプロパティを取得する 2 とおりの方法を次のコード例に示します。

' elementList is an AutomationElement.
' The following two calls are equivalent.
Dim name As String = elementList.Current.Name
name = CStr(elementList.GetCurrentPropertyValue(AutomationElement.NameProperty))
// elementList is an AutomationElement.

// The following two calls are equivalent.
string name = elementList.Current.Name;
name = elementList.GetCurrentPropertyValue(AutomationElement.NameProperty) as string;

AutomationElement でサポートされるコントロール パターンのプロパティを取得する場合は、コントロール パターン オブジェクトを取得する必要はありません。 単にパターン プロパティ識別子の 1 つをメソッドに渡します。

コントロール パターンのプロパティを取得する 2 とおりの方法を次のコード例に示します。

' elementList is an AutomationElement representing a list box.
' Error-checking is omitted. Assume that elementList is known to support SelectionPattern.
Dim selectPattern As SelectionPattern = _
    DirectCast(elementList.GetCurrentPattern(SelectionPattern.Pattern), SelectionPattern)
Dim isMultipleSelect As Boolean = selectPattern.Current.CanSelectMultiple

' The following call is equivalent to the one above.
isMultipleSelect = CBool(elementList.GetCurrentPropertyValue(SelectionPattern.CanSelectMultipleProperty))
// elementList is an AutomationElement representing a list box.
// Error-checking is omitted. Assume that elementList is known to support SelectionPattern.

SelectionPattern selectPattern =
    elementList.GetCurrentPattern(SelectionPattern.Pattern) as SelectionPattern;
bool isMultipleSelect = selectPattern.Current.CanSelectMultiple;

// The following call is equivalent to the one above.
isMultipleSelect = (bool)
    elementList.GetCurrentPropertyValue(SelectionPattern.CanSelectMultipleProperty);

Get メソッドは Object を返します。 アプリケーションは、この値を使用する前に、返されたオブジェクトを適切な型にキャストする必要があります。

既定のプロパティ値

UI オートメーション プロバイダーがプロパティを実装していない場合、UI Automation システムは既定値を提供できます。 たとえば、コントロールのプロバイダーが HelpTextProperty によって識別されたプロパティをサポートしていない場合、UI Automationは空の文字列を返します。同様に、プロバイダーが IsDockPatternAvailableProperty によって識別されたプロパティをサポートしていない場合、UI Automationは false を返します。

この動作を変更するには、AutomationElement.GetCachedPropertyValue メソッドおよび AutomationElement.GetCurrentPropertyValue メソッドのオーバーロードを使用します。 2 番目のパラメーターとして true を指定した場合、UI Automationは既定値を返さず、代わりに特殊な値 NotSupported を返します。

次のコード例は、要素からプロパティを取得することを試みています。プロパティがサポートされていない場合は、代わりにアプリケーション定義の値が使用されます。

' elementList is an AutomationElement.
Dim help As Object = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, True)
If help Is AutomationElement.NotSupported Then
    help = "No help available"
End If
Dim helpText As String = CStr(help)
// elementList is an AutomationElement.
object help = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, true);
if (help == AutomationElement.NotSupported)
{
    help = "No help available";
}
string helpText = (string)help;

要素によってサポートされているプロパティを調べるためには、GetSupportedProperties を使用します。 これにより、AutomationProperty 識別子の配列が返されます。

プロパティ変更イベント

AutomationElement またはコントロール パターンのプロパティ値が変化すると、イベントが発生します。 アプリケーションは、AddAutomationPropertyChangedEventHandler を呼び出し、目的のプロパティを指定するために最後のパラメーターとして AutomationProperty 識別子の配列を提供して、このようなイベントをサブスクライブできます。

AutomationPropertyChangedEventHandler では、イベント引数の Property メンバーを調べることによって、変更されたプロパティを識別できます。 また、引数には、変更された UI Automationプロパティの古い値と新しい値も含まれています。 これらの値は Object 型であり、使用する前に正しい型にキャストする必要があります。

その他の AutomationElement プロパティ

Current プロパティおよび Cached プロパティの構造体に加えて、AutomationElement には、単純なプロパティ アクセサーを介して取得される次のプロパティがあります。

プロパティ

説明

CachedChildren

キャッシュ内にある子 AutomationElement オブジェクトのコレクション。

CachedParent

キャッシュ内にある AutomationElement 親オブジェクト。

FocusedElement

(静的なプロパティ) 入力フォーカスがある AutomationElement

RootElement

(静的プロパティ) ルート AutomationElement

参照

処理手順

UI オートメーション イベントのサブスクライブ

概念

UI オートメーション クライアントにおけるキャッシュ

サーバー側 UI オートメーション プロバイダーの実装