クライアントの UI オートメーション プロパティ
更新 : 2007 年 11 月
ここでは、UI オートメーション クライアント アプリケーションに公開されている UI オートメーション プロパティについて説明します。
AutomationElement オブジェクトのプロパティには、ユーザー インターフェイス (UI) 要素 (通常はコントロール) に関する情報が含まれます。AutomationElement のプロパティは汎用です。すなわち、コントロール型に固有ではありません。これらのプロパティの多くは、AutomationElement.AutomationElementInformation 構造体で公開されます。
また、コントロール パターンもプロパティを持ちます。コントロール パターンのプロパティは、パターンに固有です。たとえば、ScrollPattern に含まれるプロパティを使用すると、ウィンドウを垂直方向または水平方向にスクロールできるかどうか、また、現在のビュー サイズおよびスクロール位置をクライアント アプリケーションで調べることができます。コントロール パターンは、そのすべてのプロパティを構造体 (ScrollPattern.ScrollPatternInformation など) を介して公開します。
UI オートメーションプロパティは読み取り専用です。コントロールのプロパティを設定するには、適切なコントロール パターンのメソッドを使用する必要があります。たとえば、スクロール ウィンドウの位置の値を変更する場合は、Scroll を使用します。
パフォーマンスを向上させるために、AutomationElement オブジェクトを取得したときに、コントロールおよびコントロール パターンのプロパティ値をキャッシュできます。詳細については、「UI オートメーション クライアントにおけるキャッシュ」を参照してください。
このトピックには次のセクションが含まれています。
- プロパティ ID
- プロパティ条件
- プロパティの取得
- 既定のプロパティ値
- プロパティ変更イベント
- その他の AutomationElement プロパティ
- 関連トピック
プロパティ ID
プロパティ識別子 (ID) は、AutomationProperty オブジェクトにカプセル化されている一意の定数値です。UI オートメーション クライアント アプリケーションは、これらの ID を AutomationElement クラスまたは適切なコントロール パターン クラス (ScrollPattern など) から取得します。UI オートメーション プロバイダは、AutomationElementIdentifiers またはコントロール パターン識別子クラスの 1 つ (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.
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 オートメーション システムは既定値を提供できます。たとえば、コントロールのプロバイダが HelpTextProperty によって識別されたプロパティをサポートしていない場合、UI オートメーションは空の文字列を返します。同様に、プロバイダが IsDockPatternAvailableProperty によって識別されたプロパティをサポートしていない場合、UI オートメーションは false を返します。
この動作を変更するには、AutomationElement.GetCachedPropertyValue メソッドおよび AutomationElement.GetCurrentPropertyValue メソッドのオーバーロードを使用します。2 番目のパラメータとして true を指定した場合、UI オートメーションは既定値を返さず、代わりに特殊な値 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 オートメーションプロパティの古い値と新しい値も含まれています。これらの値は Object 型であり、使用する前に正しい型にキャストする必要があります。
その他の AutomationElement プロパティ
Current プロパティおよび Cached プロパティの構造体に加えて、AutomationElement には、単純なプロパティ アクセサを介して取得される次のプロパティがあります。
プロパティ |
説明 |
---|---|
キャッシュ内にある子 AutomationElement オブジェクトのコレクション。 |
|
キャッシュ内にある AutomationElement 親オブジェクト。 |
|
(静的なプロパティ) 入力フォーカスがある AutomationElement。 |
|
(静的プロパティ) ルート AutomationElement。 |