Share via


UI 자동화 및 활성 접근성

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

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

프로그래밍 언어

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

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

서버 및 클라이언트

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 포인터를 비교하여 동일한 요소를 참조하는지 확인하기가 어렵습니다.

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

트리 뷰 및 탐색

화면의 UI 요소는 데스크톱을 루트로, 애플리케이션 창을 직계 자식으로, 애플리케이션 내 요소를 추가 하위 항목으로 사용하는 트리 구조로 볼 수 있습니다.

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

UI 자동화 클라이언트 애플리케이션은 필터링된 뷰를 통해 UI를 표시합니다. 보기에는 사용자에게 정보를 제공하거나 사용자가 상호 작용할 수 있는 요소만 포함됩니다. 컨트롤 요소만 포함하고 콘텐츠 요소만 포함하는 미리 정의된 뷰를 사용할 수 있으며 클라이언트 애플리케이션은 사용자 지정 보기를 정의할 수 있습니다. UI 자동화 통해 사용자에게 UI를 더 쉽게 설명하고 사용자가 애플리케이션과 상호 작용하는 데 도움이 됩니다.

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

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

UI 자동화 탐색은 Microsoft 활성 접근성보다 더 일관됩니다. 드롭다운 목록 및 팝업 창과 같은 일부 요소는 Microsoft Active Accessibility 트리에 두 번 표시되며 해당 요소에서 탐색하면 예기치 않은 결과가 발생할 수 있습니다. Rebar 컨트롤에 대해 Microsoft Active Accessibility를 제대로 구현하기가 어렵습니다. UI 자동화 창의 소유권에 의해 부과된 계층 구조에도 불구하고 요소를 트리의 아무 곳에나 배치할 수 있도록 재분석 및 위치를 변경할 수 있습니다.

역할 및 컨트롤 형식

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

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

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

다음 표에서는 Microsoft Active Accessibility개체 역할을 UI 자동화 컨트롤 형식에 매핑합니다.

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 머리글
ROLE_SYSTEM_COLUMNHEADER HeaderItem
ROLE_SYSTEM_LINK 하이퍼링크
ROLE_SYSTEM_GRAPHIC 이미지
ROLE_SYSTEM_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 Spinner
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에 대한 설명은 Automation 요소 속성 식별자를 참조하세요.

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 활성 접근성 동작과 일치하도록 0-100으로 정규화됩니다. 값은 문자열로 표시됩니다.
get_accHelp UIA_HelpTextPropertyId
accLocation UIA_BoundingRectanglePropertyId
get_accDescription 지원되지 않습니다. accDescription에는 Microsoft Active Accessibility의 명확한 사양이 없으므로 서버에서 이 속성에 다양한 정보를 배치했습니다.
get_accHelpTopic 지원되지 않습니다.

 

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

Active Accessibility 상태 UI 자동화 속성 WinEvent 상태 변경을 트리거하나요?
STATE_SYSTEM_CHECKED 검사 상자의 UIA_ToggleToggleStatePropertyId. 라디오 단추의 UIA_SelectionItemIsSelectedPropertyId. Y
STATE_SYSTEM_COLLAPSED UIA_ExpandCollapseExpandCollapseStatePropertyId (값 = ExpandCollapseState_Collapsed). Y
STATE_SYSTEM_EXPANDED UIA_ExpandCollapseExpandCollapseStatePropertyId (value = ExpandCollapseState_Expanded 또는 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 및 IUIAutomationElement::GetClickablePoint 실패). N
STATE_SYSTEM_LINKED UIA_ControlTypePropertyId (값 = 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 인터페이스를 사용하여 이 기능을 활용할 수 있습니다. 이 인터페이스는 UI 요소에 Microsoft Active Accessibility 속성 및 메서드를 노출하는 컨트롤 패턴을 나타냅니다. 요소를 검색할 때 애플리케이션은 이 컨트롤 패턴 및 해당 속성을 캐시할 것을 요청할 수 있습니다.

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

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

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

UI 자동화 트리 개요

UI 자동화 속성 개요

UI 자동화 컨트롤 형식 개요

UI 자동화 이벤트 개요

Microsoft Active Accessibility