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 Éléments windows 7. Cette rubrique comprend les sections suivantes.

Notes

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

 

Vue d’ensemble

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

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

L’image suivante montre la vue Éléments dans Windows Explorer.

capture d’écran montrant l’Explorateur Windows avec le composant d’affichage des éléments

Du point de vue d’un développeur, la structure générale et les fonctionnalités de la vue Éléments sont similaires à celles du contrôle d’affichage de liste. La main différence est que la vue Éléments prend en charge la virtualisation, contrairement au contrôle list-view. En outre, la vue Éléments utilise deux nouvelles interfaces UI Automation pour s’assurer que le contenu virtualisé fourni par la vue É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 d’éléments virtualisés.

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

Dans l’arborescence UI Automation, l’élément UI Automation niveau supérieur de la vue Éléments 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élimité en rouge. Différents éléments UI Automation existent sous le niveau supérieur de 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 « Group » 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 feuilles dans la vue : 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 feuilles tels que « Dossier », « Musique » et « Image ». Ces trois éléments UI Automation sont désignés par les termes Élément ItemsView, Élément Group et Élément ListItem dans le reste de ce document.

Virtualisation

La vue Éléments utilise la virtualisation, ce qui signifie que les éléments situés en dehors de la zone visible de la vue ne sont pas extraits du système et que leur représentation d’interface utilisateur 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
  • UI Automation éléments pour les éléments virtualisés
  • UI Automation éléments pour les éléments virtualisés sélectionnés

Obtention d’un nombre de tous les éléments

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

La propriété ItemStatus est une chaîne qui spécifie un nombre total d’éléments et un nombre 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. Notamment :

  • ItemCount_Property_GUID (ABBF5C45-5CCC-47b7-BB4E-87CB87BBD162) : nombre de tous les éléments uniques dans la vue. S’il est regroupé par une propriété multi-valeur (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 de tous les éléments uniques sélectionnés dans la vue. S’il est regroupé par une propriété multi-valeur (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és (PROPERTYID) pour les propriétés personnalisées.

Obtention d’un index d’élément pour tous les éléments

Un client peut obtenir l’index d’un élément soit en obtenant la propriété ItemStatus d’un élément ListItem, soit 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 de base 1 d’un élément. S’il est regroupé par une propriété multi-valeur (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 KIT de développement logiciel (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), ce 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. La 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, la tentative d’obtention d’un autre modèle de contrôle ou d’une autre 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 est bloqué, la vue ne répond pas tant que FindItemByProperty n’est pas retourné, et tout autre appel de méthode sur le fournisseur doit attendre que FindItemByProperty se termine. Dans certains cas, FindItemByProperty doit traiter l’ensemble du jeu de données avant de le 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 le retour de l’élément de départ. La spécification de noms NULL permet à un client UI Automation d’énumérer tous les éléments de l’affichage. Toutefois, l’énumération de tous les éléments est déconseillée, car elle 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 lors de l’énumération de tous les éléments sélectionnés, car le nombre d’éléments sélectionnés peut être très important, 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 dans l’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 à l’écran fait défiler hors écran, 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 dans et hors de l’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 défilent dans l’affichage, et sont virtualisés à mesure qu’ils défilent en dehors de l’affichage.

Utilisation d’éléments virtualisés