アイテム ビューで仮想化されたアイテムのクエリを実行する方法

このトピックでは、Microsoft UI オートメーションを使用して、Windows 7 項目ビューの仮想化された項目に関する UI 情報を取得する方法について説明します。 このトピックのセクションは次のとおりです。

Note

このトピックは Windows 7 にのみ適用されます。 このトピックで説明するアクセシビリティ機能は、今後のバージョンの Windows で変更される可能性があることに注意してください。

 

概要

アイテム ビューは、ユーザーがファイルやその他の項目を表示および操作できるようにするユーザー インターフェイス コンポーネントです。 Windows 7 では、アイテム ビューは、Windows エクスプローラーの既定のビューで項目を表示するためのリスト ビュー コントロールに置き換えられます。 アイテム ビューは、共通項目ダイアログ、スタート メニューの検索結果、および エクスプローラー ブラウザー コントロールを使用するその他の Windows 7 UI 要素でも使用されます。 リスト ビュー コントロールと比較すると、アイテム ビューにはユーザーに次の利点があります。

  • アイテム ビューでは、より便利で、望ましい、関連性の高い方法でアイテムを表示でき、ユーザーはより簡単に、迅速かつ楽しくアイテムを見つけて整理できます。
  • アイテム ビューでは、パフォーマンス特性が異なるデータ ソースの大きなアイテム セットを表示できるため、ユーザーは複数のソース間でアイテムのコレクション全体を参照および検索できます。

次の図は、Windows エクスプローラーのアイテム ビューを示しています。

アイテム ビュー コンポーネントを含むエクスプローラーを示すスクリーン ショット

開発者の観点から見ると、Items View の一般的な構造と機能は、リスト ビュー コントロールの構造と似ています。 メイン違いは、Items View では仮想化がサポートされているのに対し、リスト ビュー コントロールではサポートされない点です。 また、アイテム ビューでは、2 つの新しいUI オートメーション インターフェイスを使用して、アイテム ビューによって提供される仮想化コンテンツに確実にアクセスできるようにします。 これらのインターフェイスについては、このトピックの以下のセクションで説明します。

UI オートメーションでの仮想化に関する一般的な情報については、「仮想化された項目の操作」を参照してください。

アイテム ビュー ツリーの構造

UI オートメーション ツリーでは、Items View の最上位UI オートメーション要素の名前は "ItemsView" で、コントロールの種類は "list" です。 前の図では、ItemsView UI オートメーション 要素は赤で囲まれています。 ItemsView の最上位レベルの下にはさまざまなUI オートメーション要素が存在しますが、このドキュメントでは他の 2 つのUI オートメーション要素 (グループ アイテムとリスト アイテム) のみが参照されています。

グループ項目は、そのグループのすべてのリスト アイテムを含むUI オートメーション要素です。コントロールの種類は "Group" で、グループ名によって名前が異なります。 前の図では、最初のグループ項目には "A-H (1)" ヘッダーと "Folder" リスト アイテムの両方が含まれており、その名前は "A-H" です。

リスト アイテムは、ビュー内のリーフ項目を表すUI オートメーション要素です。コントロールの種類は "ListItem" で、名前はアイテム名によって異なります。 前の図のリスト要素は、"Folder"、"Music"、"Picture" などのリーフ要素です。 これら 3 つのUI オートメーション要素は、このドキュメントの残りの部分で ItemsView 要素、Group 要素、および ListItem 要素という用語によって参照されます。

仮想化

Items View は仮想化を使用します。つまり、ビューの表示領域外の項目はシステムからフェッチされず、UI 表現は作成されません。 これらの項目は 、仮想化された項目と呼ばれます。 これらは作成されないため、仮想化された項目にはUI オートメーション要素がないため、UI オートメーション クライアントがツリーを列挙するときに、UI オートメーション ツリーには表示されません。 また、UI オートメーションコントロール パターンは、可視要素でのみ動作します。 たとえば、 Selection コントロール パターンは、クライアントが IUIAutomationSelectionPattern::GetCurrentSelection メソッドを呼び出すときに、表示されている選択された項目のみを返します。

項目ビューでは、仮想化された項目に関する次の情報を取得する機能がサポートされています。

  • 仮想化された項目を含む項目の合計数のカウント
  • 仮想化された項目のUI オートメーション要素
  • 選択されている仮想化された項目のUI オートメーション要素

すべての項目の数を取得する

クライアントは ItemsView 要素を使用して、すべてのアイテムの数と、選択したアイテムの数を取得できます。 ItemsView 要素には、これらのカウントを取得する 2 つの方法があります。 1 つ目は ItemsView 要素の ItemStatus プロパティを取得し、2 つ目は ItemsView 要素からカスタム プロパティを取得することです。

ItemStatus プロパティは、項目の合計数と、選択した項目の数をコンマで区切って指定する文字列です。 たとえば、"3 つの項目、1 つの項目が選択されました" などです。 この文字列はローカライズされ、ユーザーに直接伝えることができます。

ItemsView 要素のカスタム プロパティには、アイテム数の 1 つのプロパティと、選択カウント用のプロパティが含まれます。 これには次のようなものがあります。

  • ItemCount_Property_GUID (ABBF5C45-5CCC-47b7-BB4E-87CB87BBD162)—ビュー内のすべての一意の項目の数。 1 つのアイテムを複数回表示できるように複数値プロパティ (MVP) でグループ化した場合、各項目は 1 回だけカウントされます。

    (UIAutomationType: UIAutomationType_Int、プログラム名: "ItemCount")

  • SelectedItemCount_Property_GUID (92A053DA-2969-4021-BF27-514CFC2E4A69)—ビューで選択されているすべての一意の項目の数。 1 つのアイテムを複数回表示できるように複数値プロパティ (MVP) でグループ化した場合、各項目は 1 回だけカウントされます。

    (UIAutomationType: UIAutomationType_Int、プログラム名: "SelectedItemCount")

これらのカスタム プロパティは、Windows ソフトウェア開発キット (SDK) に含まれる Shlguid.h で定義され、これらのプロパティは IUIAutomationRegistrar::RegisterProperty メソッドを使用して登録されます。 クライアントUI オートメーション RegisterProperty を使用して、カスタム プロパティのプロパティ識別子 (PROPERTYID) を取得します。

すべての項目に対する項目インデックスの取得

クライアントは、ListItem 要素の ItemStatus プロパティを取得するか、ListItem 要素のカスタム プロパティを取得することで、アイテムのインデックスを取得できます。

ItemStatus プロパティは、アイテムの合計数に関するアイテムのインデックスを含む文字列です。 例: "item 1 of 3" この文字列はローカライズされ、ユーザーに直接伝えることができます。

次のカスタム プロパティは、ListItem 要素の項目インデックスを取得します。

  • ItemIndex_Property_GUID (92A053DA-2969-4021-BF27-514CFC2E4A69)—項目の 1 から始まる絶対インデックス。 1 つのアイテムを 2 回表示できるように複数値プロパティ (MVP) でグループ化した場合、アイテムの各外観は個別のインデックスを取得します。

    (UIAutomationType: UIAutomationType_Int、プログラム名: "ItemIndex")

このカスタム プロパティは、Windows SDK に含まれる Shlguid.h で定義され、 IUIAutomationRegistrar::RegisterProperty メソッドを使用して登録されます。 UI オートメーションクライアントは RegisterProperty を使用して、カスタム プロパティのプロパティ識別子 (PROPERTYID) を取得します。

招待されたアイテムへの参照を取得する

ItemsView 要素は ItemContainer コントロール パターン (IItemContainerProvider インターフェイス) を実装します。これにより、クライアントは仮想化された項目 (表示領域の外側にある項目) のUI オートメーション要素を取得できます。 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 オートメーション要素への参照を取得した後、クライアントは VirtualizedItem コントロール パターンの IUIAutomationVirtualizeItemPattern::Realize メソッドを使用して、項目をビューにスクロールできます。 アイテムが実現されると、そのアイテムが表示され、通常は ListItem 要素に関連付けられているすべてのプロパティとコントロール パターンがクライアントで使用できるようになります。

IUIAutomationItemContainerPattern::FindItemByProperty メソッドによって取得された ListItem 要素のみが、VirtualizedItem コントロール パターンを公開します。 画面上の要素が画面外にスクロールされると、 要素は無効になり、クライアントは FindItemByProperty を呼び出して画面外参照を取得する必要があります。

スクロール コントロール パターン (または スクロール バーを使用) を使用して、アイテムをビューの外に移動することもできます。 項目とグループは、ビューにスクロールすると実現され、ビューからスクロールすると仮想化されます。

仮想化された項目の操作