Comment interroger un élément virtualisé en mode Éléments

Cette rubrique explique comment utiliser Microsoft UI Automation pour récupérer des informations d’interface utilisateur sur les éléments virtualisés dans la vue Windows 7 éléments. Cette rubrique comprend les sections suivantes.

Notes

Cette rubrique s’applique uniquement à Windows 7. Sachez que les fonctionnalités d’accessibilité décrites dans cette rubrique peuvent changer dans les futures versions de Windows.

 

Vue d’ensemble

La vue Éléments est un composant d’interface utilisateur qui permet aux utilisateurs d’afficher et d’interagir avec des fichiers et d’autres éléments. Dans Windows 7, l’affichage Éléments remplace le contrôle d’affichage liste pour la présentation des éléments dans l’affichage par défaut de Windows’Explorateur. La vue Éléments est également utilisée dans la boîte de dialogue Élément commun, menu Démarrer résultats de la recherche et d’autres éléments d’interface utilisateur Windows 7 qui utilisent le contrôle Explorateur Browser. Par rapport au contrôle d’affichage liste, l’affichage Éléments offre les avantages suivants aux utilisateurs :

  • La vue Éléments peut présenter des éléments de manière plus utile, souhaitable et pertinente, ce qui permet aux utilisateurs de rechercher et d’organiser des éléments plus simplement, rapidement et agréablement.
  • La vue Éléments peut afficher de grands ensembles d’éléments provenant de sources de données ayant des caractéristiques de performances différentes, ce qui permet aux utilisateurs de parcourir et de rechercher toute leur collection d’éléments sur plusieurs sources.

L’image suivante montre l’affichage Éléments dans Windows’Explorateur.

screen shot showing windows explorer with items view component

Du point de vue d’un développeur, la structure générale et les fonctionnalités de l’affichage Éléments sont similaires à celles du contrôle d’affichage liste. La principale différence est que la vue Éléments prend en charge la virtualisation, alors que le contrôle list-view ne le fait pas. En outre, l’affichage Éléments utilise deux nouvelles interfaces UI Automation pour garantir que le contenu virtualisé fourni par l’affichage Éléments est accessible. Ces interfaces sont décrites dans les sections suivantes de cette rubrique.

Pour obtenir des informations générales sur la virtualisation dans UI Automation, consultez Utilisation des éléments virtualisés.

Structure d’arborescence d’affichage des éléments

Dans l’arborescence UI Automation, l’élément de niveau supérieur UI Automation d’Items View porte le nom « ItemsView » et le type de contrôle « list ». Dans l’image précédente, l’élément ItemsView UI Automation est décrit en rouge. Plusieurs éléments UI Automation existent sous le niveau supérieur d’ItemsView, mais seuls deux autres éléments UI Automation sont référencés dans ce document : les éléments de groupe et les éléments de liste.

Les éléments de groupe sont les éléments UI Automation qui contiennent tous les éléments de liste de ce groupe. Leur type de contrôle est « Groupe » et leurs noms varient en fonction du nom du groupe. Dans l’image précédente, le premier élément de groupe contient à la fois l’en-tête « A-H (1) » et l’élément de liste « Dossier », et son nom est « A-H ».

Les éléments de liste sont les éléments UI Automation qui représentent les éléments feuille dans l’affichage: leur type de contrôle est « ListItem » et leurs noms varient en fonction du nom de l’élément. Dans l’image précédente, les éléments de liste sont les éléments feuille tels que « Folder », « Musique » et « Picture ». Ces trois éléments UI Automation sont référencés par l’élément ItemsView, l’élément Group et l’élément ListItem dans le reste de ce document.

Virtualisation

La vue Éléments utilise la virtualisation, ce qui signifie que les éléments en dehors de la zone visible de la vue ne sont pas extraits du système et que la représentation de l’interface utilisateur de ces éléments n’est pas créée. Ces éléments sont appelés éléments virtualisés. Étant donné qu’ils ne sont pas créés, les éléments virtualisés n’ont pas d’éléments UI Automation et n’apparaissent donc pas dans l’arborescence UI Automation lorsqu’un client UI Automation énumère l’arborescence. En outre, UI Automation modèles de contrôle fonctionnent uniquement sur les éléments visibles. Par exemple, le modèle de contrôle Selection retourne uniquement les éléments sélectionnés visibles lorsqu’un client appelle la méthode IUIAutomationSelectionPattern::GetCurrentSelection .

La vue Éléments prend en charge la possibilité de récupérer les informations suivantes sur les éléments virtualisés :

  • Nombre total d’éléments, y compris les éléments virtualisés
  • éléments UI Automation pour les éléments virtualisés
  • UI Automation éléments pour les éléments virtualisés sélectionnés

Obtention d’un nombre d’éléments

Un client peut utiliser l’élément ItemsView pour obtenir le nombre de tous les éléments, ainsi que le nombre des éléments sélectionnés. L’élément ItemsView fournit deux façons d’obtenir ces nombres. La première consiste à obtenir la propriété ItemStatus de l’élément ItemsView, et la seconde consiste à obtenir des propriétés personnalisées à partir de l’élément ItemsView.

La propriété ItemStatus est une chaîne qui spécifie le nombre total d’éléments et le nombre total d’éléments sélectionnés, séparés par une virgule. Par exemple : « 3 éléments, 1 élément sélectionné ». Cette chaîne est localisée et peut être communiquée directement à l’utilisateur.

Les propriétés personnalisées de l’élément ItemsView incluent une propriété pour le nombre d’éléments, et une autre pour le nombre de sélections. Elles comprennent :

  • ItemCount_Property_GUID (ABBF5C45-5CCC-47b7-BB4E-87CB87BBD162) : nombre d’éléments uniques dans la vue. S’il est regroupé par une propriété à valeurs multiples (MVP) afin qu’un seul élément puisse apparaître plusieurs fois, chaque élément n’est compté qu’une seule fois.

    (UIAutomationType : UIAutomationType_Int, Nom programmatique : « ItemCount »)

  • SelectedItemCount_Property_GUID (92A053DA-2969-4021-BF27-514CFC2E4A69) : nombre d’éléments uniques sélectionnés dans la vue. S’il est regroupé par une propriété à valeurs multiples (MVP) afin qu’un seul élément puisse apparaître plusieurs fois, chaque élément n’est compté qu’une seule fois.

    (UIAutomationType : UIAutomationType_Int, Nom programmatique : « SelectedItemCount »)

Ces propriétés personnalisées sont définies dans Shlguid.h, qui est inclus dans le kit de développement logiciel (SDK) Windows, et ces propriétés sont inscrites via la méthode IUIAutomationRegistrar::RegisterProperty. UI Automation clients utilisent RegisterProperty pour récupérer des identificateurs de propriété (PROPERTYID) pour les propriétés personnalisées.

Obtention d’un index d’élément par rapport à tous les éléments

Un client peut obtenir l’index d’un élément en obtenant la propriété ItemStatus d’un élément ListItem ou en obtenant une propriété personnalisée d’un élément ListItem.

La propriété ItemStatus est une chaîne qui contient l’index d’un élément par rapport au nombre total d’éléments. Par exemple : « élément 1 sur 3 ». Cette chaîne est localisée et peut être communiquée directement à l’utilisateur.

La propriété personnalisée suivante obtient l’index d’élément d’un élément ListItem :

  • ItemIndex_Property_GUID (92A053DA-2969-4021-BF27-514CFC2E4A69) : index absolu basé sur 1 d’un élément. S’il est regroupé par une propriété à valeurs multiples (MVP) afin qu’un seul élément puisse apparaître deux fois, chaque apparence de l’élément obtient un index distinct.

    (UIAutomationType : UIAutomationType_Int, Nom programmatique : « ItemIndex »)

Cette propriété personnalisée est définie dans Shlguid.h, qui est incluse dans le sdk Windows et est inscrite via la méthode IUIAutomationRegistrar::RegisterProperty. UI Automation clients utilisent RegisterProperty pour récupérer un identificateur de propriété (PROPERTYIDs) pour la propriété personnalisée.

Obtention d’une référence à un élément vitualisé

Un élément ItemsView implémente le modèle de contrôle ItemContainer (interface IItemContainerProvider), qui permet à un client d’obtenir un élément UI Automation pour un élément virtualisé (élément qui se trouve en dehors de la zone visible). ItemsView permet au client de rechercher un élément ListItem en effectuant une recherche sur les propriétés Name et Selection . Toute tentative de recherche sur une autre propriété échoue.

Un élément virtuel implémente uniquement le modèle de contrôle VirtualizedItem (interface IVirtualizedItemProvider ). Étant donné que l’élément représenté par un élément UI Automation virtualisé n’existe pas encore, toute tentative d’obtention d’un autre modèle de contrôle ou propriété de l’élément échoue.

Les éléments ListItem et Group sont virtualisés, mais seuls les éléments ListItem peuvent être retournés à partir du modèle de contrôle ItemContainer . Étant donné que l’appel à la méthode IUIAutomationItemContainerPattern::FindItemByProperty s’exécute sur le thread d’interface utilisateur et qu’il bloque, la vue ne répond pas tant que FindItemByProperty n’est pas retourné et que les autres appels de méthode sur le fournisseur doivent attendre que FindItemByProperty se termine. Dans certains cas, FindItemByProperty doit traiter l’ensemble du jeu de données avant de retourner, ce qui peut être gourmand en ressources. Si vous spécifiez NULL comme élément de départ, FindItemByProperty commence la recherche avec le premier élément de la vue.

ItemsView prend en charge les propriétés suivantes pour FindItemByProperty :

  • Nom (UIA_NamePropertyId) : recherche le premier élément dont le nom correspond entièrement à la chaîne spécifiée. La recherche ne respecte pas la casse. Les caractères génériques ou la correspondance partielle ne sont pas pris en charge. Si un nom NULL est spécifié, l’élément suivant après l’élément de départ est retourné. La spécification de noms NULL permet à un client UI Automation d’énumérer tous les éléments de la vue . Toutefois, l’énumération de tous les éléments est déconseillée, car cela entraîne la réalisation de tous les éléments de la vue.
  • SelectionItem_IsSelected (UIA_SelectionItemIsSelectedPropertyId) : recherche le premier élément dont la propriété SelectionItem_IsSelected correspond à la valeur spécifiée. Spécifiez TRUE pour rechercher le premier élément sélectionné ou FALSE pour rechercher le premier élément non sélectionné. Soyez prudent lorsque vous énumérez tous les éléments sélectionnés, car le nombre d’éléments sélectionnés peut être très volumineux, en particulier si l’utilisateur a sélectionné tous les éléments.

Défilement d’un élément virtualisé à l’écran

Après avoir obtenu une référence à un élément UI Automation pour un élément virtualisé (hors écran), le client peut faire défiler l’élément en mode affichage à l’aide de la méthode IUIAutomationVirtualizeItemPattern::Realize du modèle de contrôle VirtualizedItem. Une fois l’élément réalisé, il est visible et toutes les propriétés et modèles de contrôle normalement associés à un élément ListItem sont disponibles pour le client.

Seuls les éléments ListItem obtenus par la méthode IUIAutomationItemContainerPattern::FindItemByProperty exposent le modèle de contrôle VirtualizedItem . Lorsqu’un élément visuel est désactivé, l’élément devient non valide et le client doit appeler FindItemByProperty pour obtenir la référence hors écran.

Il est également possible de déplacer des éléments vers et hors d’affichage à l’aide du modèle de contrôle Scroll (ou à l’aide des barres de défilement). Les éléments et les groupes sont réalisés au fur et à mesure qu’ils font défiler l’affichage et sont virtualisés à mesure qu’ils sortent de l’affichage.

Utilisation des éléments virtualisés