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 자동화 컨트롤 형식에 매핑합니다.
상태 및 속성
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를 보여 줍니다.
속성 ID의 전체 목록은 속성 식별자를 참조하세요.
이벤트
Microsoft Active Accessibility와 달리 UI 자동화 이벤트 메커니즘은 창 핸들과 밀접하게 연결된 Windows 이벤트 라우팅에 의존하지 않으며 클라이언트 애플리케이션이 후크를 설정할 필요가 없습니다. 이벤트에 대한 구독은 특정 이벤트뿐만 아니라 트리의 특정 부분으로 미세 조정할 수 있습니다. 공급자는 수신 대기 중인 이벤트를 추적하여 이벤트 발생을 미세 조정할 수도 있습니다.
또한 이벤트 콜백에 직접 전달되므로 클라이언트가 이벤트를 발생시키는 요소를 검색하는 것이 더 쉽습니다. 클라이언트가 이벤트를 구독할 때 캐시 요청이 제공된 경우 요소의 속성이 자동으로 프리페치됩니다.
다음 표에서는 Microsoft Active Accessibility 이벤트 상수 및 UI 자동화 이벤트 ID의 대응을 보여 줍니다.
UI 자동화 활성 접근성 속성 및 개체에 액세스
Microsoft Active Accessibility에서 사용할 수 없는 UI 자동화 주요 기능은 단일 프로세스 간 작업으로 여러 속성을 가져오는 기능입니다.
기존 Microsoft Active Accessibility 클라이언트는 IUIAutomationLegacyIAccessiblePattern 인터페이스를 사용하여 이 기능을 활용할 수 있습니다. 이 인터페이스는 UI 요소에 Microsoft Active Accessibility 속성 및 메서드를 노출하는 컨트롤 패턴을 나타냅니다. 요소를 검색할 때 애플리케이션은 이 컨트롤 패턴 및 해당 속성을 캐시할 것을 요청할 수 있습니다.
IUIAutomationLegacyIAccessiblePattern 을 사용하면 클라이언트가 IAccessible에 대한 네이티브 지원이 없는 요소에서 Microsoft Active Accessibility 속성을 가져올 수도 있습니다.
IUIAutomationLegacyIAccessiblePattern의 속성을 변경해도 UI 자동화 이벤트가 발생하지 않습니다.
관련 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기