다음을 통해 공유


UI 자동화 및 Active Accessibility

Microsoft Active Accessibility는 Windows 애플리케이션에 액세스할 수 있도록 설계된 레거시 API로, Windows 95에서 도입되었습니다. Microsoft UI 자동화는 보조 기술 제품 및 자동 테스트 도구의 요구를 충족시키기 위한 Windows의 새로운 접근성 모델입니다. Microsoft Active Accessibility에 비해, UI 자동화는 많은 개선 사항을 제공합니다. 두 가지 기술의 차이점을 이 토픽에서 설명합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

프로그래밍 언어

이중 인터페이스를 지원하는 COM(구성 요소 개체 모델)을 기반으로 하는 Microsoft Active Accessibility는 C/C++ 및 스크립팅 언어로 프로그래밍할 수 있습니다.

UI 자동화가 도입되었을 때, 클라이언트 API는 관리 코드로 제한되었으며, 관리되는 구현 및 관리되지 않는 구현이 공급자 API에 모두 포함되었습니다. Windows 7에서는 새로운 COM 기반 클라이언트 API가 도입되어 C/C++에서 UI 자동화 클라이언트 애플리케이션을 보다 쉽게 프로그래밍할 수 있도록 했습니다.

서버 및 클라이언트

Microsoft Active Accessibility에서, 주로 IAccessible 인터페이스의 서버 구현을 통해 서버와 클라이언트가 직접 통신합니다.

UI 자동화에서, 서버(공급자)와 클라이언트 사이에 핵심 서비스가 있습니다. 핵심 서비스 공급자는 공급자가 구현한 인터페이스를 호출하며, UI 요소에 대한 고유한 런타임 식별자 생성 등과 같은 추가적인 서비스를 제공합니다. 클라이언트 애플리케이션은 이 핵심 서비스에 액세스하기 위해 CUIAutomation 개체를 만들 수 있습니다. 공급자 인터페이스와 분리된 클라이언트 인터페이스 집합을 이 개체가 지원합니다. CUIAutomation 개체 만들기를 참조하여 자세한 내용을 확인하세요.

UI 자동화 공급자는 Microsoft Active Accessibility 클라이언트에 정보 제공이 가능하며, Microsoft Active Accessibility 서버는 UI 자동화 클라이언트 애플리케이션에 정보 제공이 가능합니다. 하지만 Microsoft Active Accessibility는 UI 자동화만큼 많은 정보를 노출하지 않으므로, 두 모델이 완전히 호환되지는 않습니다.

UI 요소

Microsoft Active Accessibility는 자식 식별자와 쌍을 이루는 IAccessible 인터페이스로 UI 요소를 제공합니다. 두 IAccessible 포인터를 비교하여 동일한 요소를 참조하는지 확인하는 것은 까다롭습니다.

클라이언트에 IUIAutomationElement 인터페이스를 노출하는 개체로 UI 자동화 모든 요소가 표시됩니다. 요소를 비교하기 위해 IUIAutomationElement::GetRuntimeId를 사용하여 검색되는 런타임 식별자를 활용할 수 있습니다.

트리 뷰 및 탐색

데스크톱이 루트, 애플리케이션 창이 직계 자식, 애플리케이션 내의 요소가 추가적인 하위 항목인 트리 구조로 화면의 UI 요소가 표시될 수 있습니다.

Microsoft Active Accessibility에서는 트리 구조에 최종 사용자와 관련이 없는 많은 UI 요소가 노출됩니다. 어떤 요소가 의미가 있는지 확인하기 위해, 클라이언트 애플리케이션은 트리의 모든 요소를 검사해야 합니다.

UI 자동화 클라이언트 애플리케이션은 필터링된 뷰를 통해 UI를 표시합니다. 사용자에게 정보를 제공하거나 사용자가 상호 작용할 수 있는 요소만 보기에 포함됩니다. 제어 요소만 포함된 사전 정의된 보기와 콘텐츠 요소만 포함된 사전 정의된 보기를 사용 가능하며, 클라이언트 애플리케이션에서 사용자 정의 보기에 대한 정의가 가능합니다. UI를 사용자에게 더 쉽게 설명하며, 사용자가 애플리케이션과 상호 작용할 수 있도록 UI 자동화가 도와줍니다.

Microsoft Active Accessibility에서는 요소 간의 탐색이 공간적일 수 있습니다. 예를 들어, 논리적으로, 화면 왼쪽에 있는 요소로 이동하는 경우. 예를 들어, 계층적으로, 다음 메뉴 항목 또는 대화 상자의 탭 순서에서 다음 항목으로 이동하는 경우. 예를 들어, 컨테이너 내의 첫 번째 자식 요소로 이동하거나 자식 요소에서 부모 요소로 이동하는 경우입니다. 계층적 탐색의 경우, 이는 자식 요소가 IAccessible을 구현하는 개체가 아닐 수 있으므로 복잡한 방법입니다.

IUIAutomationElement 인터페이스를 노출하며 동일한 기본 기능을 지원하는 COM 개체가 UI 자동화에서의 모든 UI 요소입니다. 공급자의 관점에서 COM 개체는 IRawElementProviderSimple에서 상속되는 인터페이스를 구현합니다. 탐색은 주로 계층적입니다. 즉, 부모에서 자식으로, 그리고 한 형제에서 다음 형제로 이동합니다. 하지만 형제 간 탐색에는 논리적 요소가 있으며, 탭 순서를 따를 수 있기 때문입니다. 클라이언트는 모든 시작점에서 탐색하기 위해 IUIAutomationTreeWalker를 사용하여 트리의 필터링된 보기를 사용 가능합니다. 또한 클라이언트는 특정 자식 또는 하위 항목으로 이동하기 위해 IUIAutomationElement::FindFirstIUIAutomationElement::FindAll을 사용할 수 있습니다. 예를 들어, 지정된 제어 패턴을 지원하는 대화 상자의 모든 요소를 쉽게 검색 가능합니다.

Microsoft Active Accessibility보다 UI 자동화의 탐색이 더 일관됩니다. 드롭다운 목록 및 팝업 창 등의 일부 요소는 Microsoft Active Accessibility 트리에 두 번 나타나며, 이러한 요소를 탐색하는 경우 예기치 않은 결과가 발생할 수 있습니다. Rebar 제어에 대해 Microsoft Active Accessibility를 제대로 구현하기는 까다롭습니다. UI 자동화를 사용하면 창 소유권에 의해 계층 구조가 적용되더라도 트리에서 요소를 원하는 위치에 배치할 수 있으며, 이는 부모 재지정 및 위치 변경이 가능하기 때문입니다.

역할 및 컨트롤 형식

Microsoft Active Accessibility는 ROLE_SYSTEM_SLIDER 또는 ROLE_SYSTEM_MENUITEM 등의 UI의 요소 역할에 대한 설명을 검색하기 위해 accRole 속성(IAccessible::get_accRole)을 사용합니다. 요소의 역할을 통해 사용 가능한 기능을 알 수 있습니다. IAccessible::accSelectIAccessible::accDoDefaultAction 등의 고정 메서드를 사용하여 제어와의 상호 작용이 수행됩니다. 클라이언트 애플리케이션과 UI 간의 상호 작용은 IAccessible을 통해서 수행할 수 있는 작업으로 제한됩니다.

반면, UI 자동화는 IUIAutomationElement::CurrentControlType(또는 IUIAutomationElement::CachedControlType) 속성에 설명된 요소의 제어 형식을 예상된 기능과 분리합니다. 기능은 특수화된 인터페이스의 구현을 통해 공급자가 지원하는 컨트롤 패턴에 의해 결정됩니다. 특정 UI 요소가 지원하는 전체 기능 집합을 설명하기 위해 제어 패턴을 조합할 수 있습니다. 일부 공급자는 특정한 제어 패턴을 지원해야 합니다. 예를 들어, 확인란의 공급자는 토글 제어 패턴을 지원해야 합니다. 다른 공급자는 하나 이상의 제어 패턴 집합을 지원해야 합니다. 예를 들어, 버튼은 토글 또는 호출 컨트롤 패턴을 지원해야 합니다. 여전히 다른 사용자는 제어 패턴을 지원하지 않습니다. 예를 들어, 제어 패턴은 이동, 크기 조정 또는 도킹할 수 없는 창에는 없습니다.

UI 자동화는 사용자 정의 컨트롤을 지원하며, 이는 UIA_CustomControlTypeId 상수로 식별되고, IUIAutomationElement::CurrentLocalizedControlType(또는 IUIAutomationElement::CachedLocalizedControlType) 속성으로 설명될 수 있습니다.

다음과 같은 표에서 UI 자동화 제어 형식에 Microsoft Active Accessibility 개체 역할을 매핑합니다.

Active Accessibility 역할 UI 자동화 컨트롤 형식
ROLE_SYSTEM_PUSHBUTTON 버튼
ROLE_SYSTEM_CLIENT 캘린더
ROLE_SYSTEM_CHECKBUTTON CheckBox
ROLE_SYSTEM_COMBOBOX ComboBox
ROLE_SYSTEM_CLIENT 사용자 지정 컨트롤 형식을 참조하세요.
ROLE_SYSTEM_LIST DataGrid
ROLE_SYSTEM_LISTITEM DataItem
ROLE_SYSTEM_DOCUMENT Document
ROLE_SYSTEM_TEXT 편집
ROLE_SYSTEM_GROUPING 그룹
ROLE_SYSTEM_LIST Header
ROLE_SYSTEM_COLUMNHEADER HeaderItem
ROLE_SYSTEM_LINK 하이퍼링크
ROLE_SYSTEM_GRAPHIC Image
ROLE_SYSTEM_LIST List
ROLE_SYSTEM_LISTITEM ListItem
ROLE_SYSTEM_MENUPOPUP 메뉴
ROLE_SYSTEM_MENUBAR MenuBar
ROLE_SYSTEM_MENUITEM MenuItem
ROLE_SYSTEM_PANE
ROLE_SYSTEM_PROGRESSBAR ProgressBar
ROLE_SYSTEM_RADIOBUTTON RadioButton
ROLE_SYSTEM_SCROLLBAR ScrollBar
ROLE_SYSTEM_SEPARATOR 구분 기호
ROLE_SYSTEM_SLIDER 슬라이더
ROLE_SYSTEM_SPINBUTTON 회전자
ROLE_SYSTEM_SPLITBUTTON SplitButton
ROLE_SYSTEM_STATUSBAR StatusBar
ROLE_SYSTEM_PAGETABLIST Tab
ROLE_SYSTEM_PAGETAB TabItem
ROLE_SYSTEM_TABLE 테이블
ROLE_SYSTEM_STATICTEXT Text
ROLE_SYSTEM_INDICATOR Thumb
ROLE_SYSTEM_TITLEBAR 제목 표시줄
ROLE_SYSTEM_TOOLBAR 툴바
ROLE_SYSTEM_TOOLTIP ToolTip
ROLE_SYSTEM_OUTLINE 트리
ROLE_SYSTEM_OUTLINEITEM TreeItem
ROLE_SYSTEM_WINDOW

 

상태 및 속성

Microsoft Active Accessibility 요소는 일반 속성 집합을 지원합니다. 요소 역할에 따라, accState 등의 일부 속성은 다른 조건을 설명해야 합니다. 속성이 요소와 관련이 없더라도, 서버는 속성을 반환하는 IAccessible의 모든 메서드를 구현해야 합니다.

UI 자동화는 추가 속성을 정의하며, Microsoft Active Accessibility의 상태에 그 중 일부가 해당합니다. 일부 속성은 모든 요소에 공통되지만, 컨트롤 형식과 컨트롤 패턴에만 관련된 속성도 있습니다. UI 자동화 공급자는 관련이 없는 속성을 구현할 필요가 없지만, 지원하지 않는 속성에 대해 null 값을 반환할 수 있습니다. UI 자동화 핵심 서비스는 기본 창 공급자에서 일부 속성을 가져올 수 있으며, 공급자가 명시적으로 구현하는 속성과 이러한 속성은 병합됩니다.

더 많은 속성을 지원할 뿐만 아니라, UI 자동화 속성을 캐시할 수 있도록 하여 성능을 향상시킬 수 있습니다.

두 모델에서의 일부 속성 간의 상관 관계를 다음과 같은 표에서 보여 줍니다. 자동화 요소 속성 식별자를 참조하여 UI 자동화 속성 ID에 대한 설명을 확인하세요.

Active Accessibility 속성 접근자 UI 자동화 속성 ID 설명
get_accKeyboardShortcut UIA_AccessKeyPropertyId 또는 UIA_AcceleratorKeyPropertyId 둘 다 있는 경우 UIA_AccessKeyPropertyId가 우선합니다.
get_accName UIA_NamePropertyId
get_accRole UIA_ControlTypePropertyId 이전의 표를 참조하여 컨트롤 형식에 대한 역할 매핑을 확인하세요.
get_accValue UIA_ValueValuePropertyId 또는 UIA_RangeValueValuePropertyId IUIAutomationValuePattern 또는 IUIAutomationRangeValuePattern을 지원하는 컨트롤 형식에만 유효합니다. Microsoft Active Accessibility 동작과 일치하도록, 범위 값이 0-100으로 정규화됩니다. 값은 문자열로 표시됩니다.
get_accHelp UIA_HelpTextPropertyId
accLocation UIA_BoundingRectanglePropertyId
get_accDescription 지원되지 않습니다. Microsoft Active Accessibility의 명확한 사양이 accDescription에 없으므로, 서버에서 이 속성에 서로 다른 정보를 배치했습니다.
get_accHelpTopic 지원되지 않습니다.

 

Microsoft Active Accessibility 개체 상태 상수에 해당하는 UI 자동화 속성 ID를 다음 표에서 보여 줍니다.

Active Accessibility 상태 UI 자동화 속성 WinEvent 상태 변경을 트리거하나요?
STATE_SYSTEM_CHECKED 확인란의 UIA_ToggleToggleStatePropertyId. 라디오 버튼의 UIA_SelectionItemIsSelectedPropertyId. Y
STATE_SYSTEM_COLLAPSED UIA_ExpandCollapseExpandCollapseStatePropertyId (value = ExpandCollapseState_Collapsed). Y
STATE_SYSTEM_EXPANDED UIA_ExpandCollapseExpandCollapseStatePropertyId (value = ExpandCollapseState_Expanded or ExpandCollapseState_PartiallyExpanded). Y
STATE_SYSTEM_FOCUSABLE UIA_IsKeyboardFocusablePropertyId. N
STATE_SYSTEM_FOCUSED UIA_HasKeyboardFocusPropertyId. N
STATE_SYSTEM_HASPOPUP 메뉴 항목의 UIA_ExpandCollapseExpandCollapseStatePropertyId. N
STATE_SYSTEM_INVISIBLE UIA_IsOffscreenPropertyId (value = True and IUIAutomationElement::GetClickablePoint fails). N
STATE_SYSTEM_LINKED UIA_ControlTypePropertyId (value = UIA_HyperlinkControlTypeId). N
STATE_SYSTEM_MIXED UIA_ToggleToggleStatePropertyId (value = ToggleState_Indeterminate. N
STATE_SYSTEM_MOVEABLE UIA_TransformCanMovePropertyId. N
STATE_SYSTEM_MULTISELECTABLE UIA_SelectionCanSelectMultiplePropertyId. N
STATE_SYSTEM_OFFSCREEN UIA_IsOffscreenPropertyId. N
STATE_SYSTEM_PROTECTED UIA_IsPasswordPropertyId. N
STATE_SYSTEM_READONLY UIA_RangeValueIsReadOnlyPropertyIdUIA_ValueIsReadOnlyPropertyId. N
STATE_SYSTEM_SELECTABLE UIA_IsSelectionItemPatternAvailablePropertyId . N
STATE_SYSTEM_SELECTED UIA_SelectionItemIsSelectedPropertyId. N
STATE_SYSTEM_SIZEABLE UIA_TransformCanResizePropertyId. N
STATE_SYSTEM_UNAVAILABLE UIA_IsEnabledPropertyId. Y

 

속성 식별자를 참조하여 속성 ID의 전체 목록을 확인하세요.

이벤트

Microsoft Active Accessibility에서와는 달리, UI 자동화의 이벤트 메커니즘은 창 핸들과 밀접하게 연결된 Windows 이벤트 라우팅을 사용하지 않으며, 후크를 설정하기 위해 클라이언트 애플리케이션이 필요하지 않습니다. 특정 이벤트뿐만 아니라 트리의 특정 부분에 대해서도 이벤트에 대한 구독을 미세하게 조정 가능합니다. 공급자는 이벤트 발생을 미세 조정하기 위해 이벤트가 수신 대기하고 있는 사항을 추적할 수 있습니다.

요소가 이벤트 콜백에 직접 전달되므로, 이벤트를 발생하는 요소를 클라이언트가 쉽게 검색할 수 있습니다. 클라이언트가 이벤트를 구독할 때 캐시 요청이 제공되어 있으면, 자동으로 요소의 속성이 프리페치됩니다.

Microsoft Active Accessibility 이벤트 상수와 UI 자동화 이벤트 ID의 대응을 다음 표에서 보여 줍니다.

WinEvent UI 자동화 이벤트 ID
EVENT_OBJECT_ACCELERATORCHANGE UIA_AcceleratorKeyPropertyId 속성 변경.
EVENT_OBJECT_CONTENTSCROLLED 연결된 스크롤 막대에서 UIA_ScrollVerticalScrollPercentPropertyId 또는 UIA_ScrollHorizontalScrollPercentPropertyId 속성이 변경됩니다.
EVENT_OBJECT_CREATE UIA_StructureChangedEventId.
EVENT_OBJECT_DEFACTIONCHANGE 해당하는 항목이 없습니다.
EVENT_OBJECT_DESCRIPTIONCHANGE 정확히 동등한 항목은 없습니다. UIA_HelpTextPropertyId 또는 UIA_LocalizedControlTypePropertyId 속성 변경이 있습니다.
EVENT_OBJECT_DESTROY UIA_StructureChangedEventId.
EVENT_OBJECT_FOCUS UIA_AutomationFocusChangedEventId.
EVENT_OBJECT_HELPCHANGE UIA_HelpTextPropertyId 변경.
EVENT_OBJECT_HIDE UIA_StructureChangedEventId.
EVENT_OBJECT_LOCATIONCHANGE UIA_BoundingRectanglePropertyId 속성 변경.
EVENT_OBJECT_NAMECHANGE UIA_NamePropertyId 속성 변경.
EVENT_OBJECT_PARENTCHANGE UIA_StructureChangedEventId.
EVENT_OBJECT_REORDER Microsoft Active Accessibility에서 일관되게 사용되지 않습니다. 직접적인 해당 이벤트가 UI 자동화에 정의되지 않았습니다.
EVENT_OBJECT_SELECTION UIA_SelectionItem_ElementSelectedEventId.
EVENT_OBJECT_SELECTIONADD UIA_SelectionItem_ElementAddedToSelectionEventId.
EVENT_OBJECT_SELECTIONREMOVE UIA_SelectionItem_ElementRemovedFromSelectionEventId.
EVENT_OBJECT_SELECTIONWITHIN 해당하는 항목이 없습니다.
EVENT_OBJECT_SHOW UIA_StructureChangedEventId.
EVENT_OBJECT_STATECHANGE 다양한 속성 변경 이벤트.
EVENT_OBJECT_VALUECHANGE UIA_RangeValueValuePropertyIdUIA_ValueValuePropertyId 변경됨.
EVENT_SYSTEM_ALERT 해당하는 항목이 없습니다.
EVENT_SYSTEM_CAPTUREEND 해당하는 항목이 없습니다.
EVENT_SYSTEM_CAPTURESTART 해당하는 항목이 없습니다.
EVENT_SYSTEM_CONTEXTHELPEND 해당하는 항목이 없습니다.
EVENT_SYSTEM_CONTEXTHELPSTART 해당하는 항목이 없습니다.
EVENT_SYSTEM_DIALOGEND UIA_Window_WindowClosedEventId.
EVENT_SYSTEM_DIALOGSTART UIA_Window_WindowOpenedEventId.
EVENT_SYSTEM_DRAGDROPEND 해당하는 항목이 없습니다.
EVENT_SYSTEM_DRAGDROPSTART 해당하는 항목이 없습니다.
EVENT_SYSTEM_FOREGROUND UIA_AutomationFocusChangedEventId.
EVENT_SYSTEM_MENUEND UIA_MenuModeEndEventId.
EVENT_SYSTEM_MENUPOPUPEND UIA_MenuClosedEventId.
EVENT_SYSTEM_MENUPOPUPSTART UIA_MenuOpenedEventId.
EVENT_SYSTEM_MENUSTART UIA_MenuModeStartEventId.
EVENT_SYSTEM_MINIMIZEEND UIA_WindowWindowVisualStatePropertyId 속성 변경.
EVENT_SYSTEM_MINIMIZESTART UIA_WindowWindowVisualStatePropertyId 속성 변경.
EVENT_SYSTEM_MOVESIZEEND UIA_BoundingRectanglePropertyId 속성 변경.
EVENT_SYSTEM_MOVESIZESTART UIA_BoundingRectanglePropertyId 속성 변경.
EVENT_SYSTEM_SCROLLINGEND UIA_ScrollVerticalScrollPercentPropertyId 또는 UIA_ScrollHorizontalScrollPercentPropertyId 속성 변경.
EVENT_SYSTEM_SCROLLINGSTART UIA_ScrollVerticalScrollPercentPropertyId 또는 UIA_ScrollHorizontalScrollPercentPropertyId 속성 변경.
EVENT_SYSTEM_SOUND 해당하는 항목이 없습니다.
EVENT_SYSTEM_SWITCHEND 동일한 사항이 없지만, UIA_AutomationFocusChangedEventId 이벤트는 새 애플리케이션이 포커스를 받았다는 것을 신호로 알립니다.
EVENT_SYSTEM_SWITCHSTART 해당하는 항목이 없습니다.
해당하는 항목이 없습니다. UIA_MultipleViewCurrentViewPropertyId 속성 변경.
해당하는 항목이 없습니다. UIA_ScrollHorizontallyScrollablePropertyId 속성 변경.
해당하는 항목이 없습니다. UIA_ScrollVerticallyScrollablePropertyId 속성 변경.
해당하는 항목이 없습니다. UIA_ScrollHorizontalScrollPercentPropertyId 속성 변경.
해당하는 항목이 없습니다. UIA_ScrollVerticalScrollPercentPropertyId 속성 변경.
해당하는 항목이 없습니다. UIA_ScrollHorizontalViewSizePropertyId 속성 변경.
해당하는 항목이 없습니다. UIA_ScrollVerticalViewSizePropertyId 속성 변경.
해당하는 항목이 없습니다. UIA_ToggleToggleStatePropertyId 속성 변경.
해당하는 항목이 없습니다. UIA_WindowWindowVisualStatePropertyId 속성 변경
해당하는 항목이 없습니다. UIA_AsyncContentLoadedEventId 이벤트.
해당하는 항목이 없습니다. UIA_ToolTipOpenedEventId 이벤트.

 

UI 자동화 활성 접근성 속성 및 개체에 액세스

단일 프로세스 간 작업으로 여러 속성을 가져오는 기능은 Microsoft Active Accessibility에서 사용할 수 없는 UI 자동화 주요 기능입니다.

기존 Microsoft Active Accessibility 클라이언트는 이 기능을 활용하기 위해 IUIAutomationLegacyIAccessiblePattern 인터페이스를 사용할 수 있습니다. 이 인터페이스는 Microsoft Active Accessibility 속성 및 메서드를 노출하는 컨트롤 패턴을 UI 요소에 표시합니다. 요소를 검색할 때, 이 컨트롤 패턴 및 해당 속성을 캐시할 것을 애플리케이션이 요청할 수 있습니다.

또한 IUIAutomationLegacyIAccessiblePattern을 사용하면 클라이언트가 IAccessible에 대한 네이티브 지원이 없는 요소에서 Microsoft Active Accessibility 속성을 가져올 수 있습니다.

UI 자동화 이벤트는 IUIAutomationLegacyIAccessiblePattern의 속성을 변경해도 발생하지 않습니다.

활성 접근성 서버에 UI 자동화 기능 추가

UI 자동화 트리 개요

UI 자동화 속성 개요

UI 자동화 컨트롤 형식 개요

UI 자동화 이벤트 개요

Microsoft Active Accessibility