다음을 통해 공유


클라이언트의 UI 자동화 속성

참고참고

이 문서는 System.Windows.Automation 네임스페이스에 정의된 관리되는 UI Automation 클래스를 사용하려는 .NET Framework 개발자를 위해 작성되었습니다.UI Automation에 대한 최신 정보는 Windows Automation API: UI Automation을 참조하십시오.

이 개요에서는 UI 자동화 클라이언트 응용 프로그램에 노출되는 UI Automation 속성을 소개합니다.

AutomationElement 개체의 속성에는 user interface (UI) 요소(주로 컨트롤)에 대한 정보가 포함됩니다. AutomationElement의 속성은 제네릭입니다. 즉, 컨트롤 형식에 따라 달라지지 않습니다. 이러한 속성의 대부분은 AutomationElement.AutomationElementInformation 구조체에 노출됩니다.

컨트롤 패턴에도 속성이 있습니다. 컨트롤 패턴의 속성은 패턴에 따라 다릅니다. 예를 들어 ScrollPattern에는 창을 세로로 스크롤할 수 있는지 또는 가로로 스크롤할 수 있는지 여부, 뷰의 현재 크기, 스크롤 위치 등을 클라이언트 응용 프로그램에서 알아내는 데 사용할 수 있는 속성이 있습니다. 컨트롤 패턴은 ScrollPattern.ScrollPatternInformation과 같은 구조체를 통해 모든 속성을 노출합니다.

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

AutomationElement 개체를 가져올 때 컨트롤 및 컨트롤 패턴의 속성 값이 캐시되도록 하여 성능을 향상시킬 수 있습니다. 자세한 내용은 UI 자동화 클라이언트의 캐싱을 참조하십시오.

이 항목에는 다음 단원이 포함되어 있습니다.

  • ID 속성
  • Condition 속성
  • 속성 검색
  • 속성 기본값
  • 속성 변경 이벤트
  • 추가 AutomationElement 속성
  • 관련 항목

ID 속성

identifiers (IDs) 속성은 AutomationProperty 개체에서 캡슐화되는 고유한 상수 값입니다. UI 자동화 클라이언트 응용 프로그램은 AutomationElement 클래스나 ScrollPattern 같은 적절한 컨트롤 패턴 클래스로부터 IDs를 가져옵니다. UI 자동화 공급자는 AutomationElementIdentifiers 또는 ScrollPatternIdentifiers 등의 컨트롤 패턴 식별자 클래스 중 하나에서 이를 가져옵니다.

AutomationProperty의 숫자 Id는 공급자가 IRawElementProviderSimple.GetPropertyValue 메서드에서 쿼리하고 있는 속성을 식별하기 위해 사용합니다. 일반적으로 클라이언트 응용 프로그램에서는 Id를 검토할 필요가 없습니다. ProgrammaticName은 디버깅 및 진단 목적으로만 사용됩니다.

Condition 속성

IDs 속성은 AutomationElement 개체를 찾는 데 사용되는 PropertyCondition 개체를 생성하는 데 사용됩니다. 예를 들어 특정 이름을 가진 AutomationElement 개체를 찾거나 활성화된 모든 컨트롤을 찾을 때 이 속성을 사용할 수 있습니다. 각 PropertyCondition은 속성과 일치해야 하는 AutomationProperty ID와 값을 지정합니다.

자세한 내용은 다음 참조 항목을 참조하십시오.

속성 검색

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

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

이러한 메서드를 사용하면 성능이 향상될 뿐만 아니라 모든 속성에 액세스할 수 있습니다.

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

' 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에서 지원하는 컨트롤 패턴의 속성을 검색하려는 경우 컨트롤 패턴 개체를 검색할 필요가 없습니다. 이 경우 패턴 속성 ID 중 하나를 메서드에 전달하기만 하면 됩니다.

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

' 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.GetCachedPropertyValueAutomationElement.GetCurrentPropertyValue 메서드 오버로드를 사용하여 이 동작을 변경할 수 있습니다. 두 번째 매개 변수로 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 ID의 배열이 반환됩니다.

속성 변경 이벤트

AutomationElement 또는 컨트롤 패턴의 속성 값이 변경되면 이벤트가 발생합니다. 응용 프로그램에서는 원하는 속성을 지정하기 위해 AddAutomationPropertyChangedEventHandler를 호출하고 마지막 매개 변수로 AutomationProperty ID의 배열을 제공하여 이러한 이벤트를 구독할 수 있습니다.

AutomationPropertyChangedEventHandler에서 이벤트 인수의 Property 멤버를 검토하여 변경된 속성을 확인할 수 있습니다. 인수에는 UI Automation 속성의 변경 전 값과 변경 후 값도 포함되어 있습니다. 이러한 값은 Object 형식이며 먼저 적절한 형식으로 캐스팅해야 사용할 수 있습니다.

추가 AutomationElement 속성

AutomationElement에는 CurrentCached 속성 구조체 외에도 단순한 속성 접근자를 통해 검색할 수 있는 다음과 같은 속성이 있습니다.

Property

설명

CachedChildren

캐시에 있는 자식 AutomationElement 개체의 컬렉션

CachedParent

캐시에 있는 AutomationElement 부모 개체

FocusedElement

(정적 속성) 입력 포커스가 있는 AutomationElement

RootElement

(정적 속성) 루트 AutomationElement

참고 항목

작업

UI 자동화 이벤트 구독

개념

UI 자동화 클라이언트의 캐싱

서버측 UI 자동화 공급자 구현