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

Note

このドキュメントは、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 オートメーション クライアント アプリケーションは、これらの ID を AutomationElement クラスまたは適切なコントロール パターン クラス (ScrollPattern など) から取得します。 UI オートメーション プロバイダーは、 AutomationElementIdentifiers またはコントロール パターン識別子クラスの 1 つ ( ScrollPatternIdentifiersなど) からこれらを取得します。

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

プロパティ条件

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

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

プロパティの取得

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

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

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

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.GetCachedPropertyValueAutomationElement.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 (静的なプロパティ) 入力フォーカスがある AutomationElement
RootElement (静的プロパティ) ルート AutomationElement

関連項目