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 자동화 캐싱 기능을 사용하는 방법을 보여 주는 코드 예제는 캐싱을 사용하는 방법을 참조하세요.
관련 항목