共用方式為


如何在項目檢視中查詢虛擬化專案

本主題描述如何使用 Microsoft UI 自動化來擷取 Windows 7 專案檢視中虛擬化專案的 UI 資訊。 本主題包含下列各節。

注意

本主題僅適用於 Windows 7。 請注意,本主題所述的輔助功能功能可能會在未來版本的 Windows 中變更。

 

概述

項目檢視是使用者介面元件,可讓用戶檢視及與檔案和其他項目互動。 在 Windows 7 中,項目檢視會取代清單檢視控件,以在 Windows 檔案總管的預設檢視中呈現專案。 項目檢視也會用於 [常用項目對話方塊]、[開始] 功能表搜尋結果,以及使用 Explorer 瀏覽器控制項的其他 Windows 7 UI 元素。 與清單檢視控件相比,項目檢視為使用者提供下列優點:

  • 項目檢視可以透過更實用、可取且相關的方式呈現專案,讓用戶能夠更簡單、快速且愉快地尋找及組織專案。
  • [項目檢視] 可以從具有不同效能特性的數據源顯示大量專案集,讓使用者跨多個來源瀏覽和搜尋其整個專案集合。

下圖顯示 Windows 檔案總管中的項目檢視。

螢幕快照,其中顯示具有項目檢視元件 的 Windows 檔案總管

從開發人員的觀點來看,項目檢視的一般結構和功能類似於清單檢視控件的結構和功能。 主要差異在於項目檢視支援虛擬化,而清單檢視控件則不支援。 此外,項目檢視會使用兩個新的UI自動化介面,以確保項目檢視所提供的虛擬化內容可供存取。 本主題的下列各節將說明這些介面。

如需 UI 自動化中虛擬化的一般資訊,請參閱 使用虛擬化專案

項目檢視樹狀結構

在 [UI 自動化] 樹狀結構中,項目檢視的最上層 UI Automation 元素名稱為 “ItemsView” 和控件類型 “list”。 在上一個影像中,ItemsView UI Automation 元素以紅色線條框出。 項目檢視的最上層底下有各種UI自動化元素,但本檔中只參考了另外兩個UI自動化元素:群組專案和清單專案。

群組專案是包含該群組之所有清單專案的UI自動化元素,其控件類型為 「群組」,其名稱會根據組名而有所不同。 在上一個影像中,第一個群組項目同時包含 “A-H (1)” 標頭和 “Folder” 清單專案,其名稱為 “A-H”。

清單項目是代表視圖中末端項目的 UI 自動化元素,其控制型別為「ListItem」,其名稱會根據項目名稱而有所不同。 在上圖中,清單元素是葉子元素,例如「Folder」、「Music」和「Picture」。 這三個UI自動化元素在本文件的其餘部分中被稱為ItemsView元素、Group元素和ListItem元素。

虛擬化

項目檢視會使用虛擬化,這表示不會從系統擷取檢視可見區域以外的專案,而且不會建立其UI表示法。 這些項目稱為 虛擬化專案。 因它們未被建立,虛擬化項目沒有 UI 自動化元素,因此當 UI 自動化客戶端列舉樹時,這些項目不會出現在 UI 自動化樹狀結構中。 此外,UI 自動化控制項模式只會在可見元素上運作。 例如,當用戶端呼叫 IUIAutomationSel ectionPattern::GetCurrentSelection 方法時,Selection 控件模式只會傳回可見的選取專案。

項目檢視支援擷取下列虛擬化專案相關信息的功能:

  • 項目總數的計算,包括虛擬化項目
  • 虛擬化專案的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”)

這些自定義屬性定義於 Shlguid.h 中,其中包含於 Windows 軟體開發工具包 (SDK),而且這些屬性是透過 IUIAutomationRegistrar::RegisterProperty 方法註冊。 使用者介面自動化用戶端會使用 RegisterProperty 來擷取自定義屬性的屬性標識碼(PROPERTYID)。

取得與所有項目相關的項目索引

客戶可以透過取得 ListItem 元素的 ItemStatus 屬性,或透過取得 ListItem 元素的自定義屬性,來獲取項目的索引。

ItemStatus 屬性是一個字串,包含項目相對於項目總數的索引序號。 例如:「item 1 of 3」。 此字串已當地語系化,而且可以直接與用戶通訊。

下列自訂屬性會取得 ListItem 元素的項目索引:

  • 項目索引_屬性_GUID(92A053DA-2969-4021-BF27-514CFC2E4A69)— 項目的以 1 為基礎的絕對索引。 如果依多重值屬性(MVP)分組,讓單一項目可以出現兩次,則項目的每次出現都會被賦予個別的索引。

    (UIAutomationType:UIAutomationType_Int,程式設計名稱:“ItemIndex”)

此自定義屬性定義於 Windows SDK 中包含的 Shlguid.h 中,並透過 IUIAutomationRegistrar::RegisterProperty 方法註冊。 使用者介面自動化用戶端會使用 RegisterProperty 來擷取自定義屬性的屬性標識碼 (PROPERTYIDs)。

取得 Vitualized 項目的參考

ItemsView 元素會實作 ItemContainer 控件模式(IItemContainerProvider 介面),這可讓用戶端取得虛擬化專案的 UI Automation 元素(位於可見區域外部的專案)。 ItemsView 可讓客戶端藉由搜尋 Name 和 Selection 屬性來尋找 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 Automation 元素參考之後,用戶端可以使用 IUIAutomationVirtualizeItemPattern::Realize 方法,將項目滾動到視圖中,VirtualizedItem 控件。 項目實現之後,即會顯示它,且與 ListItem 元素通常相關聯的所有屬性和控件模式都可供用戶端使用。

只有 IUIAutomationItemContainerPattern::FindItemByProperty 方法取得的 ListItem 元素會公開 VirtualizedItem 控件模式。 當螢幕內元素捲動離開畫面時,元素會變成無效,而且客戶端必須呼叫 FindItemByProperty,以取得離屏幕參考。

您也可以使用 滾動 控制模式(或使用滾動條)將項目移入或移出視野。 項目和群組會在滾動到可視範圍時顯示出來,並在滾動出可視範圍時虛擬化。

使用虛擬化專案