Client-Side(프록시) UI 자동화 공급자 구현

Microsoft UI 자동화 Microsoft Win32, Windows Forms 및 WPF(Windows Presentation Foundation) 애플리케이션에서 사용되는 것과 같은 대부분의 표준 컨트롤에 대한 프록시 집합을 제공합니다. 그러나 많은 사용자 지정 컨트롤 및 타사 컨트롤은 네이티브 UI 자동화 공급자를 구현하지 않습니다. UI 자동화 클라이언트 애플리케이션에 액세스하려면 이러한 컨트롤에 프록시 공급자 또는 프록시라고도 하는 클라이언트 쪽 공급자가 있어야 합니다.

이 항목에서는 지원되지 않는 컨트롤에 대한 프록시 공급자를 작성하고 클라이언트 애플리케이션에서 사용하는 프록시 목록에 추가하는 방법을 설명합니다. 다음 항목으로 구성되어 있습니다.

프록시 공급자를 구현하는 방법을 보여 주는 코드 예제는 UI 자동화 공급자에 대한 방법 항목을 참조하세요.

프록시란?

클라이언트 쪽 공급자 또는 프록시는 자체 IRawElementProviderSimple 구현이 없는 컨트롤을 대신하여 IRawElementProviderSimple 인터페이스를 구현하는 개체입니다. 프록시가 없으면 이러한 컨트롤은 UI 자동화 거의 불투명하므로 컨트롤 위치와 같은 HWND(창 핸들)에서 사용할 수 있는 기본 정보만 제공할 수 있습니다.

프록시 팩터리란?

각 프록시에는 IUIAutomationProxyFactory 인터페이스를 노출하는 개체인 해당 프록시 팩터리가 필요합니다. UI 자동화 각 프록시에 대한 프록시 팩터리에 대한 참조와 조건 집합을 포함하는 프록시 팩터리 항목의 내부 테이블을 유지 관리합니다. UI 자동화 네이티브 IRawElementProviderSimple 구현이 없는 컨트롤이 발견되면 해당 조건이 컨트롤을 지원함을 나타내는 프록시 팩터리 항목을 검색합니다. UI 자동화 처음부터 테이블을 검색하고 일치하는 항목을 찾으면 UI 자동화 팩터리의 IUIAutomationProxyFactory::CreateProvider 메서드를 호출합니다. 일치하는 프록시가 성공적으로 만들어지면 UI 자동화 검색을 중지하고 새로 만든 프록시 개체를 사용합니다. 그렇지 않으면 UI 자동화 검색을 계속합니다.

클라이언트 애플리케이션은 IUIAutomation::CreateProxyFactoryEntry 메서드를 사용하여 프록시 팩터리 항목의 인스턴스를 만듭니다. 이 메서드는 IUIAutomationProxyFactoryEntry 인터페이스 포인터를 반환합니다. 클라이언트는 IUIAutomationProxyFactoryEntry 에서 노출하는 메서드를 사용하여 프록시 팩터리가 프록시를 만드는 데 사용하는 조건 집합을 지정합니다.

IUIAutomationProxyFactory::CreateProvider를 호출할 때 UI 자동화 프록시 팩터리 개체가 사용자 지정 컨트롤을 적절하게 지원하는지 여부를 결정하는 데 사용할 수 있는 매개 변수를 전달합니다. 이 경우 프록시 팩터리는 프록시의 인스턴스를 만들고 IRawElementProviderSimple 인터페이스 포인터를 반환합니다. 그렇지 않으면 NULL 포인터를 반환합니다.

프록시 팩터리 매핑

기본적으로 UI 자동화 프록시 팩터리 테이블을 다음 순서로 검색합니다.

주문 Proxy (프록시) Description
1 Microsoft: 비통제 프록시 정확한 클래스 이름 또는 기본 클래스 이름이 "ComboBoxEx32"인 창의 경우
2 Microsoft: 비통제 프록시 정확한 클래스 이름 또는 기본 클래스 이름이 "WorkerW"인 창의 경우
3 Microsoft: 비통제 프록시 정확한 클래스 이름 또는 기본 클래스 이름이 "SHELLDLL_DefView"인 창의 경우
4 Microsoft: 컨테이너 프록시 정확한 클래스 이름 또는 기본 클래스 이름이 "#32770"인 창의 경우
5 Microsoft: 컨테이너 프록시 "AfxControlBar"를 포함하는 클래스 이름 또는 기본 클래스 이름이 있는 창의 경우
6 Microsoft: TreeView 프록시 클래스 이름 또는 기본 클래스 이름이 "SysTreeView32"가 포함된 창의 경우
7 Microsoft: ListView 프록시 클래스 이름 또는 기본 클래스 이름이 "SysListView32"(1)인 창의 경우
8 Microsoft: ListView 프록시 클래스 이름 또는 기본 클래스 이름이 "SysListView32"(2)인 창의 경우
9 Microsoft: MSAA 프록시 모든 창의 경우.

 

프록시 7 및 8은 SysListView32 컨트롤에 대한 중복 항목입니다. 수정 없이 프록시 7은 항상 SysListView32 컨트롤에 사용되며 프록시 8은 사용되지 않습니다. 프록시 8은 표시되는 목록 항목에만 사용되며 일반적으로 표시되는 요소에서만 작동하거나 엄격한 성능 요구 사항이 있는 클라이언트 애플리케이션에서 사용됩니다. 이러한 클라이언트는 프록시 7을 제거할 수 있습니다.

프록시 9, UI 자동화 프록시에 대한 Microsoft 활성 접근성은 항상 테이블의 마지막 항목이어야 합니다. 이렇게 하면 Microsoft Active Accessibility를 구현하지만 UI 자동화 않는 컨트롤에 대해 Microsoft Active Accessibility 대체 기능을 사용할 수 있습니다.

프록시 팩터리 테이블에서 항목을 수정할 때는 항목의 새 위치를 신중하게 평가해야 합니다. 사용자 지정 프록시에 대한 항목은 제어할 수 없는 프록시 및 컨테이너 프록시 뒤와 프록시를 UI 자동화 Microsoft Active Accessibility 앞에 배치하는 것이 좋습니다. 또한 CreateProvider 호출에서 지정된 창 핸들(HWND)을 지원해야 하는지 여부를 결정하는 코드가 있을 수 있지만, 클래스 이름에 따라 프록시를 선택할 UI 자동화 CreateProvider 메서드의 조건부 코드를 최소한으로 유지하는 것이 더 효율적입니다.

UI 자동화 각 클라이언트에 대해 별도의 프록시 팩터리 테이블을 유지 관리합니다. 클라이언트가 프록시 테이블을 변경하면 변경 내용이 클라이언트 자체에만 영향을 미칩니다. 다른 클라이언트는 영향을 받지 않습니다.

기본 프록시 관리

클라이언트 애플리케이션이 CUIAutomation 개체를 만들 때 프록시 팩터리 테이블에는 처음에 표준 컨트롤에 대한 기본 프록시 공급자에 대한 항목만 포함됩니다. IUIAutomationProxyFactoryMapping 인터페이스를 사용하여 클라이언트는 새 항목을 추가하고, 원치 않는 항목을 제거하고, 항목 순서를 변경하는 등의 작업을 수행할 수 있습니다. 클라이언트는 IUIAutomation::P roxyFactoryMapping 메서드를 호출하여 IUIAutomationProxyFactoryMapping 인터페이스 포인터를 검색할 수 있습니다.

사용 가능한 프록시 테이블에는 각 프록시에 대한 IUIAutomationProxyFactoryEntry 인터페이스가 포함되어 있습니다. 각 IUIAutomationProxyFactoryEntry 는 프록시가 제공하는 IUIAutomationProxyFactory 및 컨트롤 클래스를 지정하고 이벤트를 처리하는 방법을 정의합니다.

프록시 테이블은 IUIAutomation::P roxyFactoryMapping 속성에서 가져올 수 있는 IUIAutomationProxyFactoryMapping 인터페이스로 표시됩니다. 애플리케이션은 IUIAutomationProxyFactoryMapping 메서드를 사용하여 프록시를 추가하고 삭제할 수 있습니다. 이 테이블에 추가할 새 항목을 만들려면 IUIAutomation::CreateProxyFactoryEntry 를 사용하여 인터페이스를 가져온 다음 IUIAutomationProxyFactoryEntry 메서드를 사용하여 적용 가능한 컨트롤 클래스 및 프록시 동작을 정의합니다.

Client-Side(프록시) UI 자동화 공급자를 만드는 방법

UI 자동화 공급자 프로그래머 가이드