다음을 통해 공유


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

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

요소 참조의 강도

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

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

캐시된 자식 및 부모 검색

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

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

메모

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

 

캐시의 새 스냅샷 검색

캐시는 UI에서 아무 것도 변경되지 않는 한 유효합니다. 애플리케이션은 일반적으로 이벤트에 대한 응답으로 캐시의 새 스냅샷을 검색할 책임이 있습니다.

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

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

예제

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

개념

UI 자동화 컨트롤 패턴 개요

UI 자동화 요소 가져오기

UI 자동화 속성 개요