클라이언트에 대한 UI 자동화 속성

참고 항목

이 설명서는 System.Windows.Automation 네임스페이스에 정의된 관리되는 UI 자동화 클래스를 사용하려는 .NET Framework 개발자를 위한 것입니다. UI 자동화에 대한 최신 정보는 Windows 자동화 API: UI 자동화를 참조하세요.

이 개요에서는 UI 자동화 클라이언트 애플리케이션에 노출되는 UI 자동화 속성을 소개합니다.

AutomationElement 개체의 속성에는 일반적으로 컨트롤인 UI(사용자 인터페이스) 요소에 대한 정보가 포함되어 있습니다. AutomationElement 의 속성은 제네릭으로서 컨트롤 형식과 관련되지 않습니다. 이러한 속성 중 대부분은 AutomationElement.AutomationElementInformation 구조로 노출됩니다.

컨트롤 패턴에는 속성도 있습니다. 컨트롤 패턴의 속성은 패턴에 따라 다릅니다. 예를 들어, ScrollPattern 에는 클라이언트 애플리케이션이 창을 가로 또는 세로로 스크롤할 수 있는지와 현재 뷰 크기 및 스크롤 위치를 확인할 수 있는 속성이 있습니다. 컨트롤 패턴은 구조를 통해 모든 속성을 노출합니다(예: ScrollPattern.ScrollPatternInformation).

UI 자동화 속성은 읽기 전용입니다. 컨트롤의 속성을 설정하려면 적절한 컨트롤 패턴의 메서드를 사용해야 합니다. 예를 들어, 스크롤 창의 위치 값을 변경하려면 Scroll 를 사용합니다.

성능 향상을 위해 AutomationElement 개체가 검색될 때 컨트롤 및 컨트롤 패턴의 속성 값을 캐시할 수 있습니다. 자세한 내용은 UI 자동화 클라이언트의 캐싱을 참조하세요.

속성 ID

속성 ID(식별자)는 AutomationProperty 개체에 캡슐화된 고유한 상수 값입니다. UI 자동화 클라이언트 애플리케이션은 이러한 ID를 AutomationElement 클래스에서 가져오거나 ScrollPattern과 같은 적절한 컨트롤 패턴 클래스에서 가져옵니다. UI 자동화 공급자는 이러한 ID를 AutomationElementIdentifiers 또는 ScrollPatternIdentifiers와 같은 컨트롤 패턴 식별자 클래스 중 하나에서 가져옵니다.

IdAutomationProperty 숫자는 공급자가 IRawElementProviderSimple.GetPropertyValue 메서드에서 쿼리되는 속성을 식별하는 데 사용됩니다. 일반적으로 클라이언트 애플리케이션은 Id를 검사할 필요가 없습니다. ProgrammaticName은 디버깅 및 진단 목적으로만 사용됩니다.

속성 조건

속성 ID는 AutomationElement 개체를 찾는 데 사용되는 PropertyCondition 개체를 구성하는 데 사용됩니다. 예를 들어, 특정 이름의 AutomationElement 를 찾거나 활성화된 모든 컨트롤을 찾을 수 있습니다. 각 PropertyCondition 은 속성과 일치해야 하는 AutomationProperty 식별자 및 값을 지정합니다.

자세한 내용은 다음 참조 항목을 참조하세요.

속성 검색

AutomationElement 의 일부 속성 및 컨트롤 패턴 클래스의 모든 속성은 Current 또는 컨트롤 패턴 개체의 Cached 또는 AutomationElement 속성의 중첩 속성으로 노출됩니다.

또한 다음 메서드 중 하나를 사용하여 AutomationElement 또는 Cached 구조에서 사용할 수 없는 속성을 비롯한 Current 또는 컨트롤 패턴 속성을 검색할 수 있습니다.

이러한 메서드는 전체 범위 속성에 대한 액세스는 물론 약간 향상된 성능을 제공합니다.

다음 코드 예제에서는 AutomationElement의 속성을 검색하는 두 가지 방법을 보여 줍니다.

// 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에서 지원되는 컨트롤 패턴의 속성을 검색하기 위해 컨트롤 패턴 개체를 검색할 필요가 없습니다. 패턴 속성 식별자 중 하나를 메서드에 전달하면 됩니다.

다음 코드 예제에서는 컨트롤 패턴의 속성을 검색 하는 두 가지를 보여 줍니다.

// 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 메서드 오버로드를 사용하여 이 동작을 변경할 수 있습니다. 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 속성

CurrentCached 속성 구조 외에, AutomationElement 에는 다음과 같은 속성이 있으며 이러한 속성은 간단한 속성 접근자를 통해 검색됩니다.

속성 설명
CachedChildren 캐시에 있는 자식 AutomationElement 개체의 컬렉션입니다.
CachedParent 캐시에 있는 AutomationElement 부모 개체입니다.
FocusedElement (정적 속성) 입력 포커스가 있는 AutomationElement 입니다.
RootElement (정적 속성) 루트 AutomationElement입니다.

참고 항목