항목 보기에서 가상화된 항목을 쿼리하는 방법

이 항목에서는 Microsoft UI 자동화 사용하여 Windows 7 항목 보기에서 가상화된 항목에 대한 UI 정보를 검색하는 방법을 설명합니다. 이 항목은 다음과 같은 섹션으로 구성됩니다.

참고

이 항목은 Windows 7에만 적용됩니다. 이 항목에 설명된 접근성 기능은 이후 버전의 Windows에서 변경될 수 있습니다.

 

개요

항목 보기는 사용자가 파일 및 기타 항목을 보고 상호 작용할 수 있는 사용자 인터페이스 구성 요소입니다. Windows 7에서 항목 보기는 Windows Explorer 기본 보기에서 항목을 표시하기 위한 목록 보기 컨트롤을 대체합니다. 항목 보기는 Explorer 브라우저 컨트롤을 사용하는 일반 항목 대화 상자, 시작 메뉴 검색 결과 및 기타 Windows 7 UI 요소에도 사용됩니다. 목록 보기 컨트롤에 비해 항목 보기는 사용자에게 다음과 같은 이점을 제공합니다.

  • 항목 보기는 더 유용하고 바람직하며 관련성이 있는 방식으로 항목을 표시할 수 있으므로 사용자가 항목을 더 간단하고, 빠르고, 즐겁게 찾고 구성할 수 있습니다.
  • 항목 보기는 성능 특성이 다른 데이터 원본의 큰 항목 집합을 표시할 수 있으므로 사용자가 여러 원본에서 전체 항목 컬렉션을 찾아보고 검색할 수 있습니다.

다음 이미지는 Windows Explorer 항목 보기를 보여줍니다.

항목 보기 구성 요소가 있는 Windows 탐색기를 보여 주는 스크린샷

개발자의 관점에서 볼 때 항목 보기의 일반적인 구조와 기능은 목록 보기 컨트롤의 구조와 비슷합니다. 기본 차이점은 항목 보기가 가상화를 지원하는 반면 목록 보기 컨트롤은 지원하지 않는다는 것입니다. 또한 항목 보기는 두 개의 새로운 UI 자동화 인터페이스를 사용하여 항목 보기에서 제공하는 가상화된 콘텐츠에 액세스할 수 있도록 합니다. 이러한 인터페이스는 이 항목의 다음 섹션에 설명되어 있습니다.

UI 자동화 가상화에 대한 일반적인 내용은 가상화된 항목 작업을 참조하세요.

항목 보기 트리 구조

UI 자동화 트리에서 항목 보기의 최상위 수준 UI 자동화 요소에는 이름이 "ItemsView"이고 컨트롤 형식은 "list"입니다. 이전 이미지에서 ItemsView UI 자동화 요소는 빨간색으로 표시됩니다. 다양한 UI 자동화 요소가 ItemsView의 최상위 수준 아래에 있지만 이 문서에서는 그룹 항목 및 목록 항목이라는 두 개의 다른 UI 자동화 요소만 참조됩니다.

그룹 항목은 해당 그룹의 모든 목록 항목을 포함하는 UI 자동화 요소이며, 해당 컨트롤 형식은 "그룹"이며 해당 이름은 그룹 이름에 따라 달라집니다. 이전 이미지에서 첫 번째 그룹 항목에는 "A-H(1)" 헤더와 "폴더" 목록 항목이 모두 포함되어 있으며 해당 이름은 "A-H"입니다.

목록 항목은 보기의 리프 항목을 나타내는 UI 자동화 요소입니다. 컨트롤 형식은 "ListItem"이며 해당 이름은 항목 이름에 따라 다릅니다. 이전 이미지에서 목록 요소는 "폴더", "음악" 및 "그림"과 같은 리프 요소입니다. 이러한 세 UI 자동화 요소는 이 문서의 나머지 부분에서 ItemsView 요소, Group 요소 및 ListItem 요소라는 용어로 참조됩니다.

가상화

항목 보기는 가상화를 사용합니다. 즉, 보기의 표시 영역 외부에 있는 항목이 시스템에서 페치되지 않고 해당 항목의 UI 표현이 만들어지지 않습니다. 이러한 항목을 가상화된 항목이라고 합니다. 가상화된 항목은 만들어지지 않으므로 가상화된 항목에는 UI 자동화 요소가 없으므로 UI 자동화 클라이언트가 트리를 열거할 때 UI 자동화 트리에 표시되지 않습니다. 또한 UI 자동화 컨트롤 패턴은 표시되는 요소에서만 작동합니다. 예를 들어 선택 컨트롤 패턴은 클라이언트가 IUIAutomationSelectionPattern::GetCurrentSelection 메서드를 호출할 때 표시된 선택된 항목만 반환합니다.

항목 보기는 가상화된 항목에 대한 다음 정보를 검색하는 기능을 지원합니다.

  • 가상화된 항목을 포함한 총 항목 수
  • 가상화된 항목에 대한 요소 UI 자동화
  • 선택한 가상화된 항목에 대한 요소 UI 자동화

모든 항목 수 가져오기

클라이언트는 ItemsView 요소를 사용하여 선택한 항목의 개수뿐만 아니라 모든 항목의 수를 가져올 수 있습니다. ItemsView 요소는 이러한 개수를 가져오는 두 가지 방법을 제공합니다. 첫 번째는 ItemsView 요소의 ItemStatus 속성을 가져오는 것이고, 두 번째는 ItemsView 요소에서 사용자 지정 속성을 가져오는 것입니다.

ItemStatus 속성은 총 항목 수와 선택한 항목 수를 쉼표로 구분하여 지정하는 문자열입니다. 예: "항목 3개, 선택한 항목 1개". 이 문자열은 지역화되며 사용자에게 직접 전달할 수 있습니다.

ItemsView 요소의 사용자 지정 속성에는 항목 수에 대한 속성 하나와 선택 개수에 대한 속성이 포함됩니다. 해당 기능은 아래와 같습니다.

  • ItemCount_Property_GUID(ABBF5C45-5CCC-47b7-BB4E-87CB87BBD162)- 보기에 있는 모든 고유 항목의 수입니다. 단일 항목이 여러 번 표시될 수 있도록 MVP(다중 값 속성)로 그룹화된 경우 각 항목은 한 번만 계산됩니다.

    (UIAutomationType: UIAutomationType_Int, 프로그래밍 방식 이름: "ItemCount")

  • SelectedItemCount_Property_GUID(92A053DA-2969-4021-BF27-514CFC2E4A69)- 보기에서 선택한 모든 고유 항목의 수입니다. 단일 항목이 여러 번 표시될 수 있도록 MVP(다중 값 속성)로 그룹화된 경우 각 항목은 한 번만 계산됩니다.

    (UIAutomationType: UIAutomationType_Int, 프로그래밍 이름: "SelectedItemCount")

이러한 사용자 지정 속성은 SDK(Windows 소프트웨어 개발 키트)에 포함된 Shlguid.h에 정의되며, 이러한 속성은 IUIAutomationRegistrar::RegisterProperty 메서드를 통해 등록됩니다. UI 자동화 클라이언트는 RegisterProperty를 사용하여 사용자 지정 속성에 대한 속성 식별자(PROPERTYID)를 검색합니다.

모든 항목과 관련된 항목 인덱스 가져오기

클라이언트는 ListItem 요소의 ItemStatus 속성을 가져오거나 ListItem 요소의 사용자 지정 속성을 가져와 항목의 인덱스를 가져올 수 있습니다.

ItemStatus 속성은 총 항목 수와 관련된 항목의 인덱스를 포함하는 문자열입니다. 예: "항목 1/3". 이 문자열은 지역화되며 사용자에게 직접 전달할 수 있습니다.

다음 사용자 지정 속성은 ListItem 요소의 항목 인덱스 를 가져옵니다.

  • ItemIndex_Property_GUID(92A053DA-2969-4021-BF27-514CFC2E4A69)- 항목의 1 기반 절대 인덱스입니다. 단일 항목이 두 번 표시될 수 있도록 MVP(다중 값 속성)로 그룹화된 경우 항목의 각 모양은 별도의 인덱스가 됩니다.

    (UIAutomationType: UIAutomationType_Int, 프로그래밍 이름: "ItemIndex")

이 사용자 지정 속성은 Windows SDK에 포함된 Shlguid.h에 정의되며 IUIAutomationRegistrar::RegisterProperty 메서드를 통해 등록됩니다. UI 자동화 클라이언트는 RegisterProperty를 사용하여 사용자 지정 속성에 대한 속성 식별자(PROPERTYID)를 검색합니다.

Vitualized 항목에 대한 참조 가져오기

ItemsView 요소는 ItemContainer 컨트롤 패턴(IItemContainerProvider 인터페이스)을 구현하여 클라이언트가 가상화된 항목(표시되는 영역 외부에 있는 항목)에 대한 UI 자동화 요소를 가져올 수 있도록 합니다. ItemsView를 사용하면 클라이언트가 이름 및 선택 속성을 검색하여 ListItem 요소를 찾을 수 있습니다. 다른 속성을 검색하려고 하면 실패합니다.

가상 요소는 VirtualizedItem 컨트롤 패턴(IVirtualizedItemProvider 인터페이스)만 구현합니다. 가상화된 UI 자동화 요소로 표시되는 항목이 아직 없으므로 요소의 다른 컨트롤 패턴 또는 속성을 가져오는 시도가 실패합니다.

ListItem 및 Group 요소는 모두 가상화되지만 ItemContainer 컨트롤 패턴에서 ListItem 요소만 반환할 수 있습니다. IUIAutomationItemContainerPattern::FindItemByProperty 메서드에 대한 호출이 UI 스레드에서 실행되고 차단되고 있기 때문에 FindItemByProperty가 반환될 때까지 보기가 응답하지 않으며 공급자의 다른 메서드 호출은 FindItemByProperty가 완료될 때까지 기다려야 합니다. 일부 경우 FindItemByProperty 는 반환하기 전에 전체 데이터 집합을 처리해야 하며 리소스를 많이 사용할 수 있습니다. NULL을 시작 요소로 지정하면 FindItemByProperty가 보기의 첫 번째 항목으로 검색을 시작합니다.

ItemsView는 FindItemByProperty에 대해 다음 속성을 지원합니다.

  • 이름(UIA_NamePropertyId)- 이름이 지정된 문자열과 완전히 일치하는 첫 번째 항목을 검색합니다. 검색은 대/소문자를 구분하지 않습니다. 와일드카드 문자 또는 부분 일치는 지원되지 않습니다. NULL 이름을 지정하면 시작 요소 뒤의 다음 항목이 반환됩니다. NULL 이름을 지정하면 UI 자동화 클라이언트가 보기의 모든 항목을 열거할 수 있지만 보기의 모든 항목이 실현되기 때문에 모든 항목을 열거하는 것은 권장되지 않습니다.
  • SelectionItem_IsSelected(UIA_SelectionItemIsSelectedPropertyId)- SelectionItem_IsSelected 속성이 지정된 값과 일치하는 첫 번째 항목을 검색합니다. TRUE를 지정하여 첫 번째 선택한 항목을 찾거나 FALSE를 지정하여 선택되지 않은 첫 번째 항목을 찾습니다. 선택한 모든 항목을 열거할 때는 특히 사용자가 모든 항목을 선택한 경우 선택한 항목 수가 매우 클 수 있으므로 주의해야 합니다.

화면에서 가상화된 항목 스크롤

가상화된(화면 외) 항목에 대한 UI 자동화 요소에 대한 참조를 얻은 후 클라이언트는 VirtualizedItem 컨트롤 패턴의 IUIAutomationVirtualizeItemPattern::Realize 메서드를 사용하여 항목을 보기로 스크롤할 수 있습니다. 항목이 실현되면 해당 항목이 표시되고 일반적으로 ListItem 요소와 연결된 모든 속성 및 컨트롤 패턴을 클라이언트에서 사용할 수 있습니다.

IUIAutomationItemContainerPattern::FindItemByProperty 메서드에서 가져온 ListItem 요소만 VirtualizedItem 컨트롤 패턴을 노출합니다. 화면의 요소가 화면 위로 스크롤되면 요소가 잘못되고 클라이언트가 FindItemByProperty 를 호출하여 화면 을 벗어난 참조를 가져와야 합니다.

스크롤 컨트롤 패턴을 사용하거나 스크롤 막대를 사용하여 항목을 보기 내/외부로 이동할 수도 있습니다. 항목과 그룹은 보기로 스크롤할 때 실현되며 보기 밖으로 스크롤할 때 가상화됩니다.

가상화된 항목 작업