UI 자동화 속성 및 컨트롤 패턴 캐싱

Microsoft UI 자동화 사용하는 경우 클라이언트는 여러 자동화 요소에 대한 여러 속성을 검색해야 하는 경우가 많습니다. 클라이언트는 IUIAutomationElement::CurrentName 또는 CurrentAccessKey와 같은 속성 검색 메서드를 사용하여 개별 속성을 한 번에 한 요소씩 검색할 수 있습니다. 그러나 이 메서드는 검색되는 각 속성에 대해 프로세스 간 호출이 필요하기 때문에 느리고 비효율적입니다. 성능을 향상시키기 위해 클라이언트는 UI 자동화 캐싱(대량 인출이라고도 함) 기능을 사용할 수 있습니다. 캐싱을 사용하면 클라이언트가 단일 메서드 호출을 사용하여 원하는 모든 요소에 대해 원하는 모든 속성을 검색할 수 있습니다. 그런 다음 클라이언트는 필요에 따라 캐시에서 개별 속성을 검색할 수 있으며, 일반적으로 UI의 변경 내용을 나타내는 이벤트에 대한 응답으로 캐시의 새 스냅샷 정기적으로 가져올 수 있습니다.

애플리케이션은 IUIAutomation::ElementFromPointBuildCache, IUIAutomationTreeWalker::GetFirstChildElementBuildCache 또는 IUIAutomationElement::FindFirstBuildCache와 같은 메서드를 사용하여 UI 자동화 요소를 검색할 때 캐싱을 요청할 수 있습니다.

캐시는 이벤트를 구독하는 동안 캐시 요청을 지정할 때도 발생합니다. 이벤트 원본으로 이벤트 처리기에 전달된 UI 자동화 요소에는 캐시 요청에 의해 지정된 캐시된 속성 및 컨트롤 패턴이 포함됩니다. 이벤트를 구독한 후 캐시 요청을 변경해도 아무런 효과가 없습니다.

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

캐시 요청

캐싱에는 검색할 속성과 검색할 요소를 결정한 다음 이 정보를 사용하여 캐시 요청을 만드는 작업이 포함됩니다. 클라이언트가 UI 항목에 대한 IUIAutomationElement 인터페이스를 가져올 때마다 UI 자동화 캐시 요청에 지정된 정보를 캐시합니다.

캐시 요청을 만들려면 먼저 IUIAutomation::CreateCacheRequest 메서드를 사용하여 IUIAutomationCacheRequest 인터페이스 포인터를 검색합니다. 다음으로, IUIAutomationCacheRequest의 메서드를 사용하여 캐시 요청을 구성합니다.

캐시할 속성 및 컨트롤 패턴 지정

IUIAutomationCacheRequest::AddProperty를 호출하여 캐시할 속성을 지정할 수 있습니다. IUIAutomationCacheRequest::AddPattern을 호출하여 캐시할 컨트롤 패턴을 지정할 수 있습니다. 컨트롤 패턴이 캐시되면 해당 속성은 자동으로 캐시되지 않습니다. AddProperty를 사용하여 캐시할 속성을 지정해야 합니다.

전체 컨트롤 패턴을 캐시로 검색하지 않고도 컨트롤 패턴 속성(예: Value 컨트롤 패턴의 Value 속성)을 검색할 수 있습니다. 컨트롤 패턴 메서드를 사용해야 하는 경우에만 컨트롤 패턴을 검색해야 합니다.

캐싱 요청의 범위 지정 및 필터링 지정

요청을 사용하기 전에 IUIAutomationCacheRequest::TreeScope 속성을 설정하여 캐시하려는 속성 및 컨트롤 패턴의 요소를 지정할 수 있습니다. scope 캐시 요청이 전달되는 메서드에 의해 검색되는 요소를 기준으로 합니다. 예를 들어 TreeScope_Children 설정한 다음 UI 자동화 요소를 검색하는 경우 해당 요소의 자식 속성과 컨트롤 패턴은 캐시되지만 요소 자체의 속성 및 컨트롤 패턴은 캐시되지 않습니다. 검색된 요소 자체에 대해 캐싱이 수행되도록 하려면 IUIAutomationCacheRequest::TreeScope 속성에 TreeScope_Element 포함해야 합니다. scope TreeScope_Parent 또는TreeScope_Ancestors 설정할 수 없습니다. 하지만 자식 요소가 캐시될 때 부모 요소를 캐시할 수 있습니다. 이 항목의 캐시된 자식 및 부모 검색을 참조하세요.

캐싱 범위는 IUIAutomationCacheRequest::TreeFilter 속성의 영향을 받습니다. 기본적으로, 캐싱은 UI 자동화 트리의 컨트롤 뷰에 나타나는 요소에 대해서만 수행됩니다. 하지만 모든 요소 또는 콘텐츠 뷰에 나타나는 요소에만 캐싱을 적용하도록 이 속성을 변경할 수 있습니다.

요소 참조의 강도

자동화 요소를 검색할 때 기본적으로 캐시되지 않은 속성 및 컨트롤 패턴을 포함하여 해당 요소의 모든 속성 및 컨트롤 패턴에 액세스할 수 있습니다. 그러나 IUIAutomationCacheRequest::AutomationElementMode 속성을 AutomationElementMode_None 설정하여 요소에 대한 참조가 캐시된 데이터만 참조하도록 지정할 수 있습니다. 이 경우 검색된 요소의 캐시되지 않은 속성 및 컨트롤 패턴에 액세스할 수 없습니다. 즉, IUIAutomationElement::CurrentIsEnabled 와 같은 현재 속성에 액세스하거나 IUIAutomationElement::GetCurrentPattern을 사용하여 컨트롤 패턴을 검색할 수 없습니다. 캐시된 컨트롤 패턴에서는 IUIAutomationInvokePattern::Invoke와 같이 컨트롤에서 작업을 수행하는 메서드를 호출할 수 없습니다.

개체에 대한 전체 참조가 필요하지 않을 수 있는 애플리케이션의 예로는 화면 읽기 프로그램이 있습니다. 이 화면 읽기 프로그램은 자동화 요소 개체 자체를 필요로 하지 않고 창에 있는 요소의 이름 및 컨트롤 형식 속성을 프리페치할 수 있습니다.

캐시된 자식 및 부모 검색

자동화 요소를 검색하고 요청의 IUIAutomationCacheRequest::TreeScope 속성을 통해 해당 요소의 자식에 대한 캐싱을 요청하는 경우 검색한 요소에서 IUIAutomationElement::GetCachedChildren 를 호출하여 자식 요소를 가져올 수 있습니다.

TreeScope_Element 캐시 요청의 scope 포함된 경우 자식 요소에서 IUIAutomationElement::GetCachedParent를 호출하여 요청의 루트 요소를 검색할 수 있습니다.

참고

요청의 루트 요소의 부모 또는 상위 항목은 캐시할 수 없습니다.

 

캐시의 새 스냅샷 검색

캐시는 UI에서 변경된 사항이 없는 경우에만 유효합니다. 애플리케이션은 일반적으로 이벤트에 대한 응답으로 캐시의 새 스냅샷 검색해야 합니다.

캐시 요청을 사용하여 이벤트를 구독하는 경우 이벤트 처리기가 호출될 때마다 이벤트 원본으로 캐시의 IUIAutomationElement 새 스냅샷 가져옵니다. IUIAutomationElement::BuildUpdatedCache를 호출하여 요소에 대한 캐시된 정보의 새 스냅샷 검색할 수도 있습니다. 원래 IUIAutomationCacheRequest를 전달하여 이전에 캐시된 모든 정보의 새 스냅샷 가져올 수 있습니다.

캐시의 새 스냅샷 검색해도 기존 IUIAutomationElement 참조의 속성은 수정되지 않습니다.

예제

UI 자동화 캐싱 기능을 사용하는 방법을 보여 주는 코드 예제는 캐싱을 사용하는 방법을 참조하세요.

개념

UI 자동화 컨트롤 패턴 개요

UI 자동화 요소 가져오기

UI 자동화 속성 개요