注
このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージド UI オートメーション クラスを使用する .NET Framework 開発者を対象としています。 UI オートメーションの最新情報については、「Windows Automation API: UI オートメーション 」を参照してください。
この概要では、UI オートメーション クライアント アプリケーションに公開される UI オートメーション プロパティについて説明します。
AutomationElement オブジェクトのプロパティには、ユーザー インターフェイス (UI) 要素 (通常はコントロール) に関する情報が含まれています。 AutomationElementのプロパティはジェネリックです。つまり、コントロール型に固有ではありません。 これらのプロパティの多くは、 AutomationElement.AutomationElementInformation 構造体で公開されます。
コントロール パターンにもプロパティがあります。 コントロール パターンのプロパティは、パターンに固有です。 たとえば、 ScrollPattern には、ウィンドウが垂直方向または水平方向にスクロール可能かどうか、および現在のビューのサイズとスクロール位置をクライアント アプリケーションが検出できるようにするプロパティがあります。 コントロール パターンは、構造体を介してすべてのプロパティを公開します。たとえば、 ScrollPattern.ScrollPatternInformation。
UI オートメーション プロパティは読み取り専用です。 コントロールのプロパティを設定するには、適切なコントロール パターンのメソッドを使用する必要があります。 たとえば、スクロール ウィンドウの位置値を変更するには、 Scroll を使用します。
パフォーマンスを向上させるために、 AutomationElement オブジェクトを取得するときに、コントロールとコントロール パターンのプロパティ値をキャッシュできます。 詳細については、「 UI オートメーション クライアントでのキャッシュ」を参照してください。
プロパティ ID
プロパティ識別子 (ID) は、 AutomationProperty オブジェクトにカプセル化された一意の定数値です。 UI オートメーション クライアント アプリケーションは、 AutomationElement クラスまたは適切なコントロール パターン クラス ( ScrollPattern など) からこれらの ID を取得します。 UI オートメーション プロバイダーは、 AutomationElementIdentifiers またはコントロール パターン識別子クラス ( ScrollPatternIdentifiers など) から取得します。
AutomationPropertyの数値Idは、IRawElementProviderSimple.GetPropertyValue メソッドで照会されるプロパティを識別するためにプロバイダーによって使用されます。 一般に、クライアント アプリケーションは Idを調べる必要はありません。 ProgrammaticName は、デバッグと診断の目的でのみ使用されます。
プロパティの条件
プロパティ ID は、AutomationElement オブジェクトの検索に使用PropertyConditionオブジェクトの構築に使用されます。 たとえば、特定の名前を持つ AutomationElement や、有効になっているすべてのコントロールを検索できます。 各 PropertyCondition は、 AutomationProperty 識別子と、プロパティが一致する必要がある値を指定します。
詳細については、次のリファレンス トピックを参照してください。
プロパティの取得
AutomationElementの一部のプロパティとコントロール パターン クラスのすべてのプロパティは、AutomationElementまたはコントロール パターン オブジェクトのCurrent
またはCached
プロパティの入れ子になったプロパティとして公開されます。
さらに、CachedまたはCurrent構造体で使用できないプロパティを含む、AutomationElementまたはコントロール パターンのプロパティは、次のいずれかのメソッドを使用して取得できます。
これらの方法では、パフォーマンスが若干向上し、さまざまなプロパティにアクセスできます。
次のコード例は、 AutomationElementでプロパティを取得する 2 つの方法を示しています。
// elementList is an AutomationElement.
// The following two calls are equivalent.
string name = elementList.Current.Name;
name = elementList.GetCurrentPropertyValue(AutomationElement.NameProperty) as string;
' elementList is an AutomationElement.
' The following two calls are equivalent.
Dim name As String = elementList.Current.Name
name = CStr(elementList.GetCurrentPropertyValue(AutomationElement.NameProperty))
AutomationElementでサポートされているコントロール パターンのプロパティを取得するには、コントロール パターン オブジェクトを取得する必要はありません。 パターン プロパティ識別子の 1 つをメソッドに渡すだけです。
次のコード例は、コントロール パターンでプロパティを取得する 2 つの方法を示しています。
// 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);
' 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))
Get
メソッドは、Objectを返します。 アプリケーションは、値を使用する前に、返されたオブジェクトを適切な型にキャストする必要があります。
既定のプロパティ値
UI オートメーション プロバイダーがプロパティを実装していない場合、UI オートメーション システムは既定値を指定できます。 たとえば、コントロールのプロバイダーが HelpTextPropertyで識別されるプロパティをサポートしていない場合、UI オートメーションは空の文字列を返します。 同様に、プロバイダーが IsDockPatternAvailablePropertyによって識別されるプロパティをサポートしていない場合、UI オートメーションは false
を返します。
この動作は、 AutomationElement.GetCachedPropertyValue および AutomationElement.GetCurrentPropertyValue メソッドのオーバーロードを使用して変更できます。 2 番目のパラメーターとして true
を指定すると、UI オートメーションは既定値を返しませんが、代わりに特別な値 NotSupported返します。
次のコード例では、要素からプロパティの取得を試みます。プロパティがサポートされていない場合は、代わりにアプリケーション定義の値が使用されます。
// elementList is an AutomationElement.
object help = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, true);
if (help == AutomationElement.NotSupported)
{
help = "No help available";
}
string helpText = (string)help;
' 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)
要素でサポートされているプロパティを検出するには、 GetSupportedPropertiesを使用します。 これにより、 AutomationProperty 識別子の配列が返されます。
プロパティ変更イベント
AutomationElementまたはコントロール パターンのプロパティ値が変更されると、イベントが発生します。 アプリケーションは、 AddAutomationPropertyChangedEventHandlerを呼び出し、対象のプロパティを指定するために最後のパラメーターとして AutomationProperty 識別子の配列を指定することで、このようなイベントをサブスクライブできます。
AutomationPropertyChangedEventHandlerでは、イベント引数のPropertyメンバーを確認することで、変更されたプロパティを識別できます。 引数には、変更された UI オートメーション プロパティの古い値と新しい値も含まれます。 これらの値は Object 型であり、使用する前に正しい型にキャストする必要があります。
その他の AutomationElement プロパティ
CurrentおよびCachedプロパティ構造体に加えて、AutomationElementには、単純なプロパティ アクセサーを使用して取得される次のプロパティがあります。
プロパティ | 説明 |
---|---|
CachedChildren | キャッシュ内にある子 AutomationElement オブジェクトのコレクション。 |
CachedParent | キャッシュ内にある AutomationElement 親オブジェクト。 |
FocusedElement | (Static プロパティ)入力フォーカスがある AutomationElement 。 |
RootElement | (Static プロパティ)ルート AutomationElement。 |