다음을 통해 공유


UI 자동화 및 Microsoft Active Accessibility

참고참고

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

Microsoft Active Accessibility는 응용 프로그램을 액세스 가능하게 만드는 이전 솔루션이었습니다. Microsoft UI Automation은 Microsoft Windows용 새 액세스 가능성 모델이며 보조 기술 제품과 자동화된 테스트 프레임워크의 필요에 부응합니다. UI Automation에서는 Active Accessibility에 비해 향상된 많은 기능을 제공합니다.

이 항목에서는 UI Automation의 주요 기능을 소개하고 이러한 기능이 Active Accessibility와 어떻게 다른지 설명합니다.

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

  • 프로그래밍 언어
  • Windows Presentation Foundation의 지원
  • 서버 및 클라이언트
  • UI 요소
  • 트리 뷰와 탐색
  • 역할과 컨트롤 형식
  • 상태 및 속성
  • 이벤트
  • 보안
  • 관련 항목

프로그래밍 언어

Active Accessibility는 Component Object Model (COM)을 기반으로 하며 이중 인터페이스를 지원합니다. 따라서 C/C++, Microsoft Visual Basic 6.0 및 스크립팅 언어로 프로그래밍할 수 있습니다. UI Automation(표준 컨트롤용 클라이언트 쪽 공급자 라이브러리 포함)는 관리 코드로 작성되며 UI 자동화 클라이언트 응용 프로그램은 Microsoft Visual C# 또는 Microsoft Visual Basic .NET을 사용하여 매우 쉽게 프로그래밍할 수 있습니다. 인터페이스 구현인 UI 자동화 공급자는 관리 코드나 C/C++로 작성할 수 있습니다.

Windows Presentation Foundation의 지원

Windows Presentation Foundation (WPF)는 사용자 인터페이스를 만들기 위한 새 모델입니다. WPF 요소는 Active Accessibility를 기본적으로 지원하지 않지만 Active Accessibility 클라이언트에 대한 브리징 지원을 포함하는 UI Automation를 지원합니다. UI Automation를 대상으로 특별히 작성된 클라이언트만 다양한 텍스트 지원과 같은 WPF의 내게 필요한 옵션 기능을 제대로 활용할 수 있습니다.

서버 및 클라이언트

Active Accessibility에서 서버와 클라이언트는 대부분 서버의 IAccessible 구현을 통해 직접 통신합니다.

UI Automation에서는 서버(공급자라고 함)와 클라이언트 사이에 핵심 서비스가 있습니다. 핵심 서비스는 공급자가 구현한 인터페이스를 호출하여 요소에 대한 고유한 런타임 식별자의 생성과 같은 추가적인 서비스를 제공합니다. 클라이언트 응용 프로그램은 라이브러리 함수를 사용하여 UI Automation 서비스를 호출합니다.

UI 자동화 공급자는 Active Accessibility 클라이언트에 정보를 제공할 수 있고 Active Accessibility 서버는 UI 자동화 클라이언트 응용 프로그램에 정보를 제공할 수 있습니다. 하지만 Active Accessibility는 UI Automation처럼 많은 정보를 노출하지 않기 때문에 두 모델은 완전히 호환되지 않습니다.

UI 요소

Active Accessibility는 UI 요소를 IAccessible 인터페이스 또는 자식 식별자로 나타냅니다. 두 IAccessible 포인터를 비교하여 같은 요소를 참조하는지 확인하는 것은 어렵습니다.

UI Automation에서는 모든 요소가 AutomationElement 개체로 표현됩니다. 비교는 같음 연산자 또는 Equals 메서드를 사용하여 수행되며 두 가지 모두 요소의 고유한 런타임 식별자를 비교합니다.

트리 뷰와 탐색

화면에 표시되는 user interface (UI) 요소는 데스크톱이 루트이고, 응용 프로그램 창이 바로 그 아래 자식이며, 응용 프로그램 내의 요소가 그 아래 하위 항목인 트리 구조로 표시될 수 있습니다.

Active Accessibility에서는 최종 사용자에게 관계없는 여러 자동화 요소가 트리에 노출됩니다. 따라서 클라이언트 응용 프로그램이 의미 있는 요소를 확인하려면 모든 요소를 확인해야 합니다.

UI 자동화 클라이언트 응용 프로그램에는 필터링된 뷰를 통해 UI가 표시됩니다. 뷰에는 관심 있는 요소, 즉 사용자에게 정보를 제공하거나 상호 작용이 가능한 요소만 포함됩니다. 컨트롤 요소와 콘텐츠 요소의 미리 정의된 뷰만 표시됩니다. 응용 프로그램에서 사용자 지정 뷰를 정의할 수도 있습니다. UI Automation를 사용하면 사용자에게 UI를 설명하고 사용자와 응용 프로그램의 상호 작용을 돕는 작업을 손쉽게 처리할 수 있습니다.

Active Accessibility에서의 요소 간 탐색은 공간적(예: 화면 왼쪽에 있는 요소로 이동)이거나, 논리적(예: 다음 메뉴 항목 또는 대화 상자 내의 탭 순서에 따라 다음 항목으로 이동)이거나, 계층적(예: 컨테이너의 첫 번째 자식으로 또는 자식에서 부모로 이동)입니다. 계층적 탐색은 자식 요소가 IAccessible을 구현하는 개체가 아닐 수도 있기 때문에 복잡합니다.

UI Automation에서는 모든 UI 요소가 같은 기본 기능을 지원하는 AutomationElement 개체입니다. 공급자의 관점에서 보면 이들은 IRawElementProviderSimple에서 상속된 인터페이스를 구현하는 개체입니다. 탐색은 주로 계층적입니다. 즉, 부모에서 자식으로 또는 한 형제에서 다른 형제로 탐색합니다. 형제 항목 간의 탐색은 탭 순서를 따를 수 있으므로 논리적이기도 합니다. TreeWalker 클래스를 사용하면 모든 필터링된 트리 뷰를 통해 어떠한 시작 지점에서든지 탐색할 수 있습니다. 또한 FindFirstFindAll을 사용하여 특정 자식 또는 하위 항목으로 탐색할 수도 있습니다. 예를 들어 특정 컨트롤 패턴을 지원하는 대화 상자 내의 모든 요소를 매우 쉽게 검색할 수 있습니다.

UI Automation에서의 탐색은 Active Accessibility보다 훨씬 일관적입니다. 드롭다운 목록 및 팝업 창과 같은 일부 요소는 Active Accessibility 트리에 두 번 나타나며 이러한 요소에서 탐색하면 예기치 않은 결과가 생길 수 있습니다. 크기 조정 컨트롤에 대해 Active Accessibility를 제대로 구현하기란 사실상 불가능합니다. UI Automation에서는 부모 재지정과 위치 재지정이 가능하므로 창의 소유권에 의해 적용된 계층 구조인 경우에도 트리의 어느 곳에나 요소를 배치할 수 있습니다.

역할과 컨트롤 형식

Active Accessibility에서는 accRole 속성(IAccessible::get_actRole)을 사용하여 ROLE_SYSTEM_SLIDER 또는 ROLE_SYSTEM_MENUITEM과 같은 UI의 요소 역할에 대한 설명을 검색합니다. 요소의 역할은 사용 가능한 기능을 알 수 있는 주요 단서입니다. 컨트롤과의 상호 작용은 IAccessible::accSelect 및 IAccessible::accDoDefaultAction과 같은 고정된 메서드를 사용하여 수행됩니다. 클라이언트 응용 프로그램과 UI 사이의 상호 작용은 IAccessible을 통해 가능한 상호 작용으로 제한됩니다.

이와 반대로 UI Automation는 요소의 컨트롤 형식(ControlType 속성으로 설명됨)을 예상 기능과 연결하지 않습니다. 기능은 전용 인터페이스의 구현을 통해 공급자가 지원하는 컨트롤 패턴이 결정됩니다. 컨트롤 패턴을 결합하여 특정 UI 요소가 지원하는 전체 기능 집합을 설명할 수 있습니다. 몇몇 공급자는 특정 컨트롤 패턴을 지원해야 합니다. 예를 들어 확인란 공급자는 Toggle 컨트롤 패턴을 지원해야 합니다. 또한 몇몇 공급자는 하나 이상의 컨트롤 패턴 집합을 지원해야 합니다. 예를 들어 단추는 Toggle 또는 Invoke를 지원해야 합니다. 하지만 컨트롤 패턴을 전혀 지원하지 않는 공급자도 있습니다. 예를 들어 이동, 크기 조정 또는 도킹이 불가능한 창에는 컨트롤 패턴이 없습니다.

UI Automation는 Custom 속성으로 식별되고 LocalizedControlTypeProperty 속성으로 설명할 수 있는 사용자 지정 컨트롤을 지원합니다.

다음 표에서는 Active Accessibility 역할과 UI Automation 컨트롤 형식 사이의 매핑을 보여 줍니다.

Active Accessibility 역할

UI Automation 컨트롤 형식

ROLE_SYSTEM_PUSHBUTTON

Button

ROLE_SYSTEM_CLIENT

Calendar

ROLE_SYSTEM_CHECKBUTTON

Check box

ROLE_SYSTEM_COMBOBOX

Combo box

ROLE_SYSTEM_CLIENT

사용자 지정

ROLE_SYSTEM_LIST

Data grid

ROLE_SYSTEM_LISTITEM

Data item

ROLE_SYSTEM_DOCUMENT

Document

ROLE_SYSTEM_TEXT

Edit

ROLE_SYSTEM_GROUPING

Group

ROLE_SYSTEM_LIST

Header

ROLE_SYSTEM_COLUMNHEADER

Header item

ROLE_SYSTEM_LINK

하이퍼링크

ROLE_SYSTEM_GRAPHIC

Image

ROLE_SYSTEM_LIST

List

ROLE_SYSTEM_LISTITEM

List item

ROLE_SYSTEM_MENUPOPUP

Menu

ROLE_SYSTEM_MENUBAR

Menu bar

ROLE_SYSTEM_MENUITEM

Menu item

ROLE_SYSTEM_PANE

Pane

ROLE_SYSTEM_PROGRESSBAR

Progress bar

ROLE_SYSTEM_RADIOBUTTON

Radio Button

ROLE_SYSTEM_SCROLLBAR

Scroll Bar

ROLE_SYSTEM_SEPARATOR

Separator

ROLE_SYSTEM_SLIDER

Slider

ROLE_SYSTEM_SPINBUTTON

Spinner

ROLE_SYSTEM_SPLITBUTTON

Split button

ROLE_SYSTEM_STATUSBAR

Status bar

ROLE_SYSTEM_PAGETABLIST

ROLE_SYSTEM_PAGETAB

Tab item

ROLE_SYSTEM_TABLE

ROLE_SYSTEM_STATICTEXT

Text

ROLE_SYSTEM_INDICATOR

Thumb

ROLE_SYSTEM_TITLEBAR

Title bar

ROLE_SYSTEM_TOOLBAR

Tool bar

ROLE_SYSTEM_TOOLTIP

ToolTip

ROLE_SYSTEM_OUTLINE

트리

ROLE_SYSTEM_OUTLINEITEM

Tree item

ROLE_SYSTEM_WINDOW

Window

여러 가지 컨트롤 형식에 대한 자세한 내용은 UI 자동화 컨트롤 형식을 참조하십시오.

상태 및 속성

Active Accessibility에서 요소는 공통 속성 집합을 지원하며 accState와 같은 일부 속성은 요소의 역할에 따라 각각 다르게 설명해야 합니다. 서버는 요소에 관련이 없더라도 속성을 반환하는 IAccessible의 모든 메서드를 구현해야 합니다.

UI Automation는 이외에도 많은 속성을 정의하며 그 중 일부는 Active Accessibility의 상태에 해당합니다. 일부는 모든 요소에 공통이지만 컨트롤 형식과 컨트롤 패턴에 한정된 것도 있습니다. 속성은 고유한 식별자로 구분되며 대부분의 속성은 GetCurrentPropertyValue 또는 GetCachedPropertyValue 중 하나의 메서드를 사용하여 검색할 수 있습니다. 또한 CurrentCached 속성 접근자에서 쉽게 검색할 수 있는 속성도 많습니다.

UI 자동화 공급자는 관련 없는 속성을 구현하지 않아도 되지만 지원하지 않는 모든 속성에 대해 null 값을 간단히 반환할 수 있습니다. 또한 UI Automation 핵심 서비스는 기본 창 공급자에서 일부 속성을 가져올 수 있으며 이는 공급자가 명시적으로 구현하는 속성과 통합됩니다.

UI Automation는 여러 속성을 지원하는 것 이외에도 하나의 프로세스 간 호출로 여러 속성을 검색할 수 있도록 허용하여 더 높은 성능을 제공합니다.

다음 표에서는 두 모델에서 서로 대응되는 속성을 보여 줍니다.

Active Accessibility 속성 접근자

UI Automation 속성 ID

설명

get_accKeyboardShortcut

AccessKeyProperty 또는 AcceleratorKeyProperty

두 속성이 모두 있는 경우 AccessKeyProperty의 우선 순위가 더 높습니다.

get_accName

NameProperty

get_accRole

ControlTypeProperty

역할과 컨트롤 형식의 매핑에 대해서는 앞의 표를 참조하십시오.

get_accValue

ValuePattern.ValueProperty

RangeValuePattern.ValueProperty

ValuePattern 또는 RangeValuePattern을 지원하는 컨트롤 형식에만 사용할 수 있습니다. RangeValue 값은 MSAA 동작과의 일관성을 위해 0-100으로 정규화됩니다. 값 항목에는 문자열이 사용됩니다.

get_accHelp

HelpTextProperty

accLocation

BoundingRectangleProperty

get_accDescription

UI Automation에서는 지원되지 않음

accDescription은 MSAA 내에 명확한 사양이 없기 때문에 공급자가 이 속성에 다른 여러 정보를 배치할 수 있습니다.

get_accHelpTopic

UI Automation에서는 지원되지 않음

다음 표에서는 Active Accessibility 상태 상수에 해당하는 UI Automation 속성을 보여 줍니다.

Active Accessibility 상태

UI Automation 속성

상태 변경 트리거 여부

STATE_SYSTEM_CHECKED

확인란의 경우 ToggleStateProperty

라디오 단추의 경우 IsSelectedProperty

Y

STATE_SYSTEM_COLLAPSED

ExpandCollapseState = Collapsed

Y

STATE_SYSTEM_EXPANDED

ExpandCollapseState = Expanded 또는 PartiallyExpanded

Y

STATE_SYSTEM_FOCUSABLE

IsKeyboardFocusableProperty

N

STATE_SYSTEM_FOCUSED

HasKeyboardFocusProperty

N

STATE_SYSTEM_HASPOPUP

메뉴 항목의 ExpandCollapsePattern

N

STATE_SYSTEM_INVISIBLE

IsOffscreenProperty = True 및 GetClickablePoint에서 NoClickablePointException를 발생시킴

N

STATE_SYSTEM_LINKED

ControlTypeProperty =

Hyperlink

N

STATE_SYSTEM_MIXED

ToggleState = Indeterminate

N

STATE_SYSTEM_MOVEABLE

CanMoveProperty

N

STATE_SYSTEM_MUTLISELECTABLE

CanSelectMultipleProperty

N

STATE_SYSTEM_OFFSCREEN

IsOffscreenProperty = True

N

STATE_SYSTEM_PROTECTED

IsPasswordProperty

N

STATE_SYSTEM_READONLY

RangeValuePattern.IsReadOnlyPropertyValuePattern.IsReadOnlyProperty

N

STATE_SYSTEM_SELECTABLE

SelectionItemPattern가 지원됨

N

STATE_SYSTEM_SELECTED

IsSelectedProperty

N

STATE_SYSTEM_SIZEABLE

CanResize

N

STATE_SYSTEM_UNAVAILABLE

IsEnabledProperty

Y

다음은 대부분 Active Accessibility 컨트롤 서버에 의해 구현되지 않거나 UI Automation에 대응하는 것이 없는 상태입니다.

Active Accessibility 상태

설명

STATE_SYSTEM_BUSY

UI Automation에서 사용할 수 없습니다.

STATE_SYSTEM_DEFAULT

UI Automation에서 사용할 수 없습니다.

STATE_SYSTEM_ANIMATED

UI Automation에서 사용할 수 없습니다.

STATE_SYSTEM_EXTSELECTABLE

Active Accessibility 서버에 의해 광범위하게 구현되지 않습니다.

STATE_SYSTEM_MARQUEED

Active Accessibility 서버에 의해 광범위하게 구현되지 않습니다.

STATE_SYSTEM_SELFVOICING

Active Accessibility 서버에 의해 광범위하게 구현되지 않습니다.

STATE_SYSTEM_TRAVERSED

UI Automation에서 사용할 수 없습니다.

STATE_SYSTEM_ALERT_HIGH

Active Accessibility 서버에 의해 광범위하게 구현되지 않습니다.

STATE_SYSTEM_ALERT_MEDIUM

Active Accessibility 서버에 의해 광범위하게 구현되지 않습니다.

STATE_SYSTEM_ALERT_LOW

Active Accessibility 서버에 의해 광범위하게 구현되지 않습니다.

STATE_SYSTEM_FLOATING

Active Accessibility 서버에 의해 광범위하게 구현되지 않습니다.

STATE_SYSTEM_HOTTRACKED

UI Automation에서 사용할 수 없습니다.

STATE_SYSTEM_PRESSED

UI Automation에서 사용할 수 없습니다.

UI Automation 속성 식별자의 전체 목록을 보려면 UI 자동화 속성 개요를 참조하십시오.

이벤트

UI Automation의 이벤트 메커니즘은 Active Accessibility와는 달리 창 핸들과 밀접하게 결합된 Windows 이벤트 라우팅에 의존하지 않으며 클라이언트 응용 프로그램이 없어도 후크를 설정할 수 있습니다. 이벤트 구독은 특정 이벤트뿐만 아니라 트리의 특정 부분에 대해서도 미세 조정할 수 있습니다. 또한 공급자는 수신되는 이벤트 관련 요소를 추적함으로써 이벤트 발생을 미세 조정할 수 있습니다.

이벤트를 발생시키는 요소는 이벤트 콜백으로 직접 전달되므로 클라이언트가 이러한 요소를 쉽게 검색할 수 있습니다. 클라이언트가 이벤트를 구독할 때 캐시 요청이 활성 상태인 경우에는 요소의 속성을 자동으로 미리 페치합니다.

다음 표에서는 Active Accessibility WinEvent와 이에 대응하는 UI Automation 이벤트를 보여 줍니다.

WinEvent

UI Automation 이벤트 식별자

EVENT_OBJECT_ACCELERATORCHANGE

AcceleratorKeyProperty 속성 변경

EVENT_OBJECT_CONTENTSCROLLED

연결된 스크롤 막대에서의 VerticalScrollPercentProperty 또는 HorizontalScrollPercentProperty 속성 변경

EVENT_OBJECT_CREATE

StructureChangedEvent

EVENT_OBJECT_DEFACTIONCHANGE

해당 사항 없음

EVENT_OBJECT_DESCRIPTIONCHANGE

정확히 해당하는 사항 없음. 대체적으로 HelpTextProperty 또는 LocalizedControlTypeProperty 속성 변경

EVENT_OBJECT_DESTROY

StructureChangedEvent

EVENT_OBJECT_FOCUS

AutomationFocusChangedEvent

EVENT_OBJECT_HELPCHANGE

HelpTextProperty 변경

EVENT_OBJECT_HIDE

StructureChangedEvent

EVENT_OBJECT_LOCATIONCHANGE

BoundingRectangleProperty 속성 변경

EVENT_OBJECT_NAMECHANGE

NameProperty 속성 변경

EVENT_OBJECT_PARENTCHANGE

StructureChangedEvent

EVENT_OBJECT_REORDER

Active Accessibility에서 일관되게 사용되지 않습니다. 직접 대응하는 이벤트가 UI Automation에 정의되어 있지 않습니다.

EVENT_OBJECT_SELECTION

ElementSelectedEvent

EVENT_OBJECT_SELECTIONADD

ElementAddedToSelectionEvent

EVENT_OBJECT_SELECTIONREMOVE

ElementRemovedFromSelectionEvent

EVENT_OBJECT_SELECTIONWITHIN

해당 사항 없음

EVENT_OBJECT_SHOW

StructureChangedEvent

EVENT_OBJECT_STATECHANGE

여러 속성 변경 이벤트

EVENT_OBJECT_VALUECHANGE

RangeValuePattern.ValuePropertyValuePattern.ValueProperty 변경

EVENT_SYSTEM_ALERT

해당 사항 없음

EVENT_SYSTEM_CAPTUREEND

해당 사항 없음

EVENT_SYSTEM_CAPTURESTART

해당 사항 없음

EVENT_SYSTEM_CONTEXTHELPEND

해당 사항 없음

EVENT_SYSTEM_CONTEXTHELPSTART

해당 사항 없음

EVENT_SYSTEM_DIALOGEND

WindowClosedEvent

EVENT_SYSTEM_DIALOGSTART

WindowOpenedEvent

EVENT_SYSTEM_DRAGDROPEND

해당 사항 없음

EVENT_SYSTEM_DRAGDROPSTART

해당 사항 없음

EVENT_SYSTEM_FOREGROUND

AutomationFocusChangedEvent

EVENT_SYSTEM_MENUEND

MenuClosedEvent

EVENT_SYSTEM_MENUPOPUPEND

MenuClosedEvent

EVENT_SYSTEM_MENUPOPUPSTART

MenuOpenedEvent

EVENT_SYSTEM_MENUSTART

MenuOpenedEvent

EVENT_SYSTEM_MINIMIZEEND

WindowVisualStateProperty 속성 변경

EVENT_SYSTEM_MINIMIZESTART

WindowVisualStateProperty 속성 변경

EVENT_SYSTEM_MOVESIZEEND

BoundingRectangleProperty 속성 변경

EVENT_SYSTEM_MOVESIZESTART

BoundingRectangleProperty 속성 변경

EVENT_SYSTEM_SCROLLINGEND

VerticalScrollPercentProperty 또는 HorizontalScrollPercentProperty 속성 변경

EVENT_SYSTEM_SCROLLINGSTART

VerticalScrollPercentProperty 또는 HorizontalScrollPercentProperty 속성 변경

EVENT_SYSTEM_SOUND

해당 사항 없음

EVENT_SYSTEM_SWITCHEND

해당 사항 없음. 그러나 AutomationFocusChangedEvent 이벤트가 새 응용 프로그램이 포커스를 받았음을 신호로 보냅니다.

EVENT_SYSTEM_SWITCHSTART

해당 사항 없음

해당 사항 없음

CurrentViewProperty 속성 변경

해당 사항 없음

HorizontallyScrollableProperty 속성 변경

해당 사항 없음

VerticallyScrollableProperty 속성 변경

해당 사항 없음

HorizontalScrollPercentProperty 속성 변경

해당 사항 없음

VerticalScrollPercentProperty 속성 변경

해당 사항 없음

HorizontalViewSizeProperty 속성 변경

해당 사항 없음

VerticalViewSizeProperty 속성 변경

해당 사항 없음

ToggleStateProperty 속성 변경

해당 사항 없음

WindowVisualStateProperty 속성 변경

해당 사항 없음

AsyncContentLoadedEvent 이벤트

해당 사항 없음

ToolTipOpenedEvent

보안

일부 IAccessible 사용자 지정 시나리오에서는 기본 IAccessible을 래핑하고 이를 통해 호출해야 합니다. 이 경우 부분적으로 신뢰할 수 있는 구성 요소가 코드 경로에서 매개자가 아니어야 하기 때문에 보안 관련 문제가 있을 수 있습니다.

UI Automation 모델에서는 공급자가 다른 공급자 코드를 통해 호출할 필요가 없습니다. UI Automation 핵심 서비스가 필요한 모든 집계를 수행합니다.

참고 항목

기타 리소스

UI 자동화 기본 사항