Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Remarque
Cette documentation est destinée aux développeurs .NET Framework qui souhaitent utiliser les classes UI Automation managées définies dans l’espace de noms System.Windows.Automation. Pour obtenir les informations les plus récentes sur UI Automation, consultez API Windows Automation : UI Automation.
Microsoft Active Accessibility était la solution précédente pour rendre les applications accessibles. Microsoft UI Automation est le nouveau modèle d’accessibilité pour Microsoft Windows et est destiné à répondre aux besoins des produits technologiques d’assistance et des outils de test automatisés. UI Automation offre de nombreuses améliorations sur l’accessibilité active.
Cette rubrique inclut les principales fonctionnalités d’UI Automation et explique comment ces fonctionnalités diffèrent de l’accessibilité active.
Langages de programmation
L’accessibilité active est basée sur le modèle objet de composant (COM) avec prise en charge des interfaces doubles, et est donc programmable dans C/C++, Microsoft Visual Basic 6.0 et les langages de script. UI Automation (y compris la bibliothèque de fournisseurs côté client pour les contrôles standard) est écrit dans le code managé, et les applications clientes UI Automation sont plus facilement programmées à l’aide de C# ou Visual Basic .NET. Les fournisseurs UI Automation, qui sont des implémentations d’interface, peuvent être écrits dans du code managé ou en C/C++.
Prise en charge dans Windows Presentation Foundation
Windows Presentation Foundation (WPF) est le nouveau modèle de création d’interfaces utilisateur. Les éléments WPF n’assurent pas la prise en charge native d’Active Accessibility. En revanche, ils prennent en charge UI Automation, qui inclut la prise en charge du pontage pour les clients Active Accessibility. Seuls les clients écrits spécifiquement pour UI Automation peuvent tirer pleinement parti des fonctionnalités d’accessibilité de WPF, telles que la prise en charge enrichie du texte.
Serveurs et clients
Dans l’accessibilité active, les serveurs et les clients communiquent directement, principalement via l’implémentation du serveur IAccessible
.
Dans UI Automation, un service principal se trouve entre le serveur (appelé fournisseur) et le client. Le service principal effectue des appels aux interfaces implémentées par les fournisseurs et fournit des services supplémentaires tels que la génération d’identificateurs d’exécution uniques pour les éléments. Les applications clientes utilisent des fonctions de bibliothèque pour appeler le service UI Automation.
Les fournisseurs UI Automation peuvent fournir des informations aux clients d’accessibilité active et les serveurs d’accessibilité active peuvent fournir des informations aux applications clientes UI Automation. Toutefois, étant donné que l’accessibilité active n’expose pas autant d’informations que UI Automation, les deux modèles ne sont pas entièrement compatibles.
Éléments d’interface utilisateur
Active Accessibility présente les éléments de l'interface utilisateur soit comme une interface IAccessible
, soit comme un identificateur enfant. Il est difficile de comparer deux IAccessible
pointeurs pour déterminer s’ils font référence au même élément.
Dans UI Automation, chaque élément est représenté en tant qu’objet AutomationElement . La comparaison est effectuée à l’aide de l’opérateur d’égalité ou de la Equals méthode, qui comparent les identificateurs d’exécution uniques des éléments.
Arborescences et navigation
Les éléments d’interface utilisateur (UI) de l’écran peuvent être considérés comme une arborescence avec le bureau comme racine, les fenêtres d’application comme enfants immédiats et les éléments dans les applications en tant que descendants ultérieurs.
Dans l’accessibilité active, de nombreux éléments d’automatisation qui ne sont pas pertinents pour les utilisateurs finaux sont exposés dans l’arborescence. Les applications clientes doivent examiner tous les éléments pour déterminer qui sont significatifs.
Les applications clientes UI Automation voient l’interface utilisateur via une vue filtrée. La vue contient uniquement des éléments intéressants : ceux qui fournissent des informations à l’utilisateur ou activent l’interaction. Les vues prédéfinies pour les éléments de contrôle uniquement et pour les éléments de contenu uniquement sont disponibles ; de plus, les applications peuvent définir des vues personnalisées. UI Automation simplifie la tâche de décrire l’interface utilisateur à l’utilisateur et d’aider l’utilisateur à interagir avec l’application.
La navigation entre les éléments, dans l’accessibilité active, est spatiale (par exemple, se déplaçant vers l’élément qui se trouve à gauche de l’écran), logique (par exemple, passer à l’élément de menu suivant, ou l’élément suivant dans l’ordre de tabulation dans une boîte de dialogue) ou hiérarchique (par exemple, déplacer le premier enfant dans un conteneur ou de l’enfant à son parent). La navigation hiérarchique est compliquée par le fait que les éléments enfants ne sont pas toujours des objets qui implémentent IAccessible
.
Dans UI Automation, tous les éléments d’interface utilisateur sont AutomationElement des objets qui prennent en charge les mêmes fonctionnalités de base. (Du point de vue du fournisseur, il s’agit d’objets qui implémentent une interface héritée de IRawElementProviderSimple.) La navigation est principalement hiérarchique : des parents aux enfants, et d’un frère à l’autre. (La navigation entre frères a un élément logique, car elle peut suivre l’ordre de tabulation.) Vous pouvez naviguer à partir de n’importe quel point de départ, à l’aide de n’importe quelle vue filtrée de l’arborescence, à l’aide de la TreeWalker classe. Vous pouvez également naviguer vers des enfants ou descendants particuliers à l'aide de FindFirst et FindAll ; par exemple, il est très facile de récupérer tous les éléments d'une boîte de dialogue qui suivent un modèle de contrôle spécifié.
La navigation dans UI Automation est plus cohérente que dans l’accessibilité active. Certains éléments tels que les listes déroulantes et les fenêtres contextuelles apparaissent deux fois dans l’arborescence Accessibilité active, et la navigation à partir d’elles peut avoir des résultats inattendus. Il est en fait impossible d'implémenter correctement l'accessibilité active pour un contrôle d'armature. UI Automation permet la définition de l’état de parent et le repositionnement, afin qu’un élément puisse être placé n’importe où dans l’arborescence en dépit de la hiérarchie imposée par la propriété des fenêtres.
Rôles et types de contrôle
L’accessibilité active utilise la accRole
propriété (IAccessible::get_actRole
) pour récupérer une description du rôle de l’élément dans l’interface utilisateur, telle que ROLE_SYSTEM_SLIDER ou ROLE_SYSTEM_MENUITEM. Le rôle d’un élément est l’indice principal pour connaître ses fonctionnalités disponibles. L’interaction avec un contrôle est obtenue à l’aide de méthodes fixes telles que IAccessible::accSelect
et IAccessible::accDoDefaultAction
. L’interaction entre l’application cliente et l’interface utilisateur est limitée à ce qui peut être fait via IAccessible
.
En revanche, UI Automation dissocie en grande partie le type de contrôle de l’élément (décrit par la ControlType propriété) de ses fonctionnalités attendues. Les fonctionnalités sont déterminées par les modèles de contrôle pris en charge par le fournisseur via son implémentation d’interfaces spécialisées. Les modèles de contrôle peuvent être combinés pour décrire l’ensemble complet de fonctionnalités prises en charge par un élément d’interface utilisateur particulier. Certains fournisseurs sont obligés de prendre en charge un modèle de contrôle particulier. Par exemple, le fournisseur d’une case à cocher doit prendre en charge le modèle de contrôle Toggle. D’autres fournisseurs sont tenus de prendre en charge un ou plusieurs modèles de contrôle ; par exemple, un bouton doit prendre en charge toggle ou Invoke. D’autres encore ne prennent pas en charge les modèles de contrôle du tout ; par exemple, un volet qui ne peut pas être déplacé, redimensionné ou ancré n’a aucun modèle de contrôle.
UI Automation prend en charge les contrôles personnalisés, identifiés par la Custom propriété et pouvant être décrits par la LocalizedControlTypeProperty propriété.
Le tableau suivant montre le mappage des rôles d’accessibilité active aux types de contrôle UI Automation.
Rôle Active Accessibility | Type de contrôle UI Automation |
---|---|
ROLE_SYSTEM_PUSHBUTTON | Bouton |
ROLE_SYSTEM_CLIENT | Calendrier |
ROLE_SYSTEM_CHECKBUTTON | Case à cocher |
ROLE_SYSTEM_COMBOBOX | Zone de liste déroulante |
ROLE_SYSTEM_CLIENT | Coutume |
ROLE_SYSTEM_LIST | Grille de données |
ROLE_SYSTEM_LISTITEM | Élément de données |
ROLE_SYSTEM_DOCUMENT | Document |
ROLE_SYSTEM_TEXT | Éditer |
ROLE_SYSTEM_GROUPING | Groupe |
ROLE_SYSTEM_LIST | En-tête de page |
ROLE_SYSTEM_COLUMNHEADER | Élément d’en-tête |
ROLE_SYSTEM_LINK | Lien hypertexte |
ROLE_SYSTEM_GRAPHIC | Image |
ROLE_SYSTEM_LIST | Liste |
ROLE_SYSTEM_LISTITEM | Élément de liste |
ROLE_SYSTEM_MENUPOPUP | Menu |
ROLE_SYSTEM_MENUBAR | Barre de menus |
ROLE_SYSTEM_MENUITEM | Élément de menu |
ROLE_SYSTEM_PANE | Panneau |
ROLE_SYSTEM_PROGRESSBAR | Barre de progression |
ROLE_SYSTEM_RADIOBUTTON | Case d’option |
ROLE_SYSTEM_SCROLLBAR | Barre de défilement |
ROLE_SYSTEM_SEPARATOR | Séparateur |
ROLE_SYSTEM_SLIDER | Curseur |
ROLE_SYSTEM_SPINBUTTON | Boucle de progression |
ROLE_SYSTEM_SPLITBUTTON | Bouton Fractionner |
ROLE_SYSTEM_STATUSBAR | Barre d’état |
ROLE_SYSTEM_PAGETABLIST | Onglet |
ROLE_SYSTEM_PAGETAB | Élément d’onglet |
ROLE_SYSTEM_TABLE | Tableau |
ROLE_SYSTEM_STATICTEXT | Texto |
ROLE_SYSTEM_INDICATOR | Pouce |
ROLE_SYSTEM_TITLEBAR | Barre de titre |
ROLE_SYSTEM_TOOLBAR | Barre d’outils |
ROLE_SYSTEM_TOOLTIP | Info-bulle |
ROLE_SYSTEM_OUTLINE | Arborescence |
ROLE_SYSTEM_OUTLINEITEM | Élément d’arborescence |
ROLE_SYSTEM_WINDOW | Fenêtre |
Pour plus d’informations sur les différents types de contrôle, consultez UI Automation Control Types.
États et propriétés
Dans l’accessibilité active, les éléments prennent en charge un ensemble commun de propriétés, et certaines propriétés (par exemple accState
) doivent décrire des éléments très différents, en fonction du rôle de l’élément. Les serveurs doivent implémenter toutes les méthodes qui IAccessible
retournent une propriété, même celles qui ne sont pas pertinentes pour l’élément.
UI Automation définit de nombreuses propriétés supplémentaires, dont certaines correspondent à des états dans l’accessibilité active. Certains sont communs à tous les éléments, mais d’autres sont spécifiques aux types de contrôle et aux modèles de contrôle. Les propriétés sont distinguées par des identificateurs uniques, et la plupart des propriétés peuvent être récupérées à l’aide d’une seule méthode ou GetCurrentPropertyValueGetCachedPropertyValue. De nombreuses propriétés sont également facilement récupérables grâce aux accesseurs de propriétés Current et Cached.
Un fournisseur UI Automation n’a pas besoin d’implémenter des propriétés non pertinentes, mais peut simplement retourner une null
valeur pour toutes les propriétés qu’il ne prend pas en charge. En outre, le service principal UI Automation peut obtenir certaines propriétés du fournisseur de fenêtres par défaut, et ceux-ci sont fusionnés avec les propriétés explicitement implémentées par le fournisseur.
En plus de prendre en charge de nombreuses propriétés supplémentaires, UI Automation offre de meilleures performances en permettant à plusieurs propriétés d’être récupérées avec un seul appel interprocesseur.
Le tableau suivant montre la correspondance entre les propriétés dans les deux modèles.
Accesseur de propriété Active Accessibility | ID de propriété UI Automation | Remarques |
---|---|---|
get_accKeyboardShortcut |
AccessKeyProperty ou AcceleratorKeyProperty |
AccessKeyProperty est prioritaire si les deux sont présents. |
get_accName |
NameProperty | |
get_accRole |
ControlTypeProperty | Consultez le tableau précédent pour le mappage des rôles aux types de contrôle. |
get_accValue |
ValuePattern.ValueProperty RangeValuePattern.ValueProperty |
Valide uniquement pour les types de contrôle qui prennent en charge ValuePattern ou RangeValuePattern. Les valeurs RangeValue sont normalisées à 0-100, pour être cohérentes avec le comportement MSAA. Les éléments de valeur utilisent une chaîne. |
get_accHelp |
HelpTextProperty | |
accLocation |
BoundingRectangleProperty | |
get_accDescription |
Non pris en charge dans UI Automation |
accDescription n’avait pas de spécification claire dans MSAA, ce qui a entraîné le placement de différents éléments d’information dans cette propriété par les fournisseurs. |
get_accHelpTopic |
Non pris en charge dans UI Automation |
Le tableau suivant indique les propriétés UI Automation qui correspondent aux constantes d’état d’accessibilité active.
État Active Accessibility | Propriété UI Automation | Déclenche le changement d’état ? |
---|---|---|
STATE_SYSTEM_CHECKED | Pour une case à cocher, ToggleStateProperty Pour le bouton radio, IsSelectedProperty |
O |
STATE_SYSTEM_COLLAPSED | ExpandCollapseState = Collapsed | O |
STATE_SYSTEM_EXPANDED | ExpandCollapseState = Expanded ou PartiallyExpanded | O |
STATE_SYSTEM_FOCUSABLE | IsKeyboardFocusableProperty | N |
STATE_SYSTEM_FOCUSED | HasKeyboardFocusProperty | N |
STATE_SYSTEM_HASPOPUP | ExpandCollapsePattern pour les éléments de menu | N |
STATE_SYSTEM_INVISIBLE | IsOffscreenProperty = Vrai et GetClickablePoint cause NoClickablePointException | N |
STATE_SYSTEM_LINKED | ControlTypeProperty = Hyperlink |
N |
STATE_SYSTEM_MIXED | ToggleState = Indeterminate | N |
STATE_SYSTEM_MOVEABLE | CanMoveProperty | N |
STATE_SYSTEM_MUTLISELECTABLE | CanSelectMultipleProperty | N |
STATE_SYSTEM_OFFSCREEN | IsOffscreenProperty = Vrai | N |
STATE_SYSTEM_PROTECTED | IsPasswordProperty | N |
STATE_SYSTEM_READONLY | RangeValuePattern.IsReadOnlyProperty et ValuePattern.IsReadOnlyProperty | N |
STATE_SYSTEM_SELECTABLE | SelectionItemPattern est pris en charge | N |
ÉTAT_SYSTÈME_SÉLECTIONNÉ | IsSelectedProperty | N |
STATE_SYSTEM_SIZEABLE | CanResize | N |
STATE_SYSTEM_UNAVAILABLE | IsEnabledProperty | O |
Les états suivants n’ont pas été implémentés par la plupart des serveurs de contrôle d’accessibilité actif ou n’ont pas d’équivalent dans UI Automation.
État Active Accessibility | Remarques |
---|---|
STATE_SYSTEM_BUSY | Non disponible dans UI Automation |
STATE_SYSTEM_DEFAULT | Non disponible dans UI Automation |
STATE_SYSTEM_ANIMATED | Non disponible dans UI Automation |
STATE_SYSTEM_EXTSELECTABLE | Non largement implémenté par les serveurs d’accessibilité active |
STATE_SYSTEM_MARQUEED | Non largement implémenté par les serveurs d’accessibilité active |
STATE_SYSTEM_SELFVOICING | Non largement implémenté par les serveurs d’accessibilité active |
STATE_SYSTEM_TRAVERSED | Non disponible dans UI Automation |
STATE_SYSTEM_ALERT_HIGH | Non largement implémenté par les serveurs d’accessibilité active |
STATE_SYSTEM_ALERT_MEDIUM | Non largement implémenté par les serveurs d’accessibilité active |
STATE_SYSTEM_ALERT_LOW | Non largement implémenté par les serveurs d’accessibilité active |
STATE_SYSTEM_FLOATING | Non largement implémenté par les serveurs d’accessibilité active |
STATE_SYSTEM_HOTTRACKED | Non disponible dans UI Automation |
STATE_SYSTEM_PRESSED | Non disponible dans UI Automation |
Pour obtenir la liste complète des identificateurs de propriétés UI Automation, consultez la vue d’ensemble des propriétés UI Automation.
Événements
Le mécanisme d’événement dans UI Automation, contrairement à celui de l’accessibilité active, ne s’appuie pas sur le routage des événements Windows (étroitement lié aux handles de fenêtre) et ne nécessite pas que l’application cliente configure des hooks. Les abonnements aux événements peuvent être ajustés non seulement à des événements particuliers mais également à des parties spécifiques de l’arborescence. Les fournisseurs peuvent également ajuster leur déclenchement d’événements en assurant le suivi des événements qui sont écoutés.
Il est également plus facile pour les clients de récupérer les éléments qui déclenchent des événements, car ils sont passés directement au rappel d’événement. Les propriétés de l’élément sont automatiquement prérécupérées si une demande de cache était active lorsque le client s’est abonné à l’événement.
Le tableau suivant présente la correspondance des événements WinEvents d’accessibilité active et UI Automation.
WinEvent | Identificateur d’événement UI Automation |
---|---|
EVENT_OBJECT_ACCELERATORCHANGE | Modification de la propriétéAcceleratorKeyProperty |
EVENT_OBJECT_CONTENTSCROLLED | VerticalScrollPercentProperty ou HorizontalScrollPercentProperty modification de propriété sur les barres de défilement associées |
EVENT_OBJECT_CREATE | StructureChangedEvent |
EVENT_OBJECT_DEFACTIONCHANGE | Pas d'équivalent |
EVENT_OBJECT_DESCRIPTIONCHANGE | Aucun équivalent exact ; peut-être HelpTextProperty ou LocalizedControlTypeProperty modification de propriété |
EVENT_OBJECT_DESTROY | StructureChangedEvent |
EVENT_OBJECT_FOCUS | AutomationFocusChangedEvent |
EVENT_OBJECT_HELPCHANGE | HelpTextProperty changement |
EVENT_OBJECT_HIDE | StructureChangedEvent |
EVENT_OBJECT_LOCATIONCHANGE | Modification de la propriétéBoundingRectangleProperty |
EVENT_OBJECT_NAMECHANGE | Modification de la propriétéNameProperty |
EVENT_OBJECT_PARENTCHANGE | StructureChangedEvent |
EVENT_OBJECT_REORDER | Non utilisé de manière cohérente dans l’accessibilité active. Aucun événement directement correspondant n’est défini dans UI Automation. |
EVENT_OBJECT_SELECTION | ElementSelectedEvent |
EVENT_OBJECT_SELECTIONADD | ElementAddedToSelectionEvent |
EVENT_OBJECT_SELECTIONREMOVE | ElementRemovedFromSelectionEvent |
EVENT_OBJECT_SELECTIONWITHIN | Pas d'équivalent |
EVENT_OBJECT_SHOW | StructureChangedEvent |
EVENT_OBJECT_STATECHANGE | Divers événements de changement de propriété |
EVENT_OBJECT_VALUECHANGE | RangeValuePattern.ValueProperty et ValuePattern.ValueProperty modifié |
EVENT_SYSTEM_ALERT | Pas d'équivalent |
EVENT_SYSTEM_CAPTUREEND | Pas d'équivalent |
EVENT_SYSTEM_CAPTURESTART | Pas d'équivalent |
EVENT_SYSTEM_CONTEXTHELPEND | Pas d'équivalent |
EVENT_SYSTEM_CONTEXTHELPSTART | Pas d'équivalent |
EVENT_SYSTEM_DIALOGEND | WindowClosedEvent |
EVENT_SYSTEM_DIALOGSTART | WindowOpenedEvent |
EVENT_SYSTEM_DRAGDROPEND | Pas d'équivalent |
EVENT_SYSTEM_DRAGDROPSTART | Pas d'équivalent |
EVENT_SYSTEM_FOREGROUND | AutomationFocusChangedEvent |
EVENT_SYSTEM_MENUEND | MenuClosedEvent |
EVENT_SYSTEM_MENUPOPUPEND | MenuClosedEvent |
EVENT_SYSTEM_MENUPOPUPSTART | MenuOpenedEvent |
EVENT_SYSTEM_MENUSTART | MenuOpenedEvent |
EVENT_SYSTEM_MINIMIZEEND | Modification de la propriétéWindowVisualStateProperty |
EVENT_SYSTEM_MINIMIZESTART | Modification de la propriétéWindowVisualStateProperty |
EVENT_SYSTEM_MOVESIZEEND | Modification de la propriétéBoundingRectangleProperty |
EVENT_SYSTEM_MOVESIZESTART | Modification de la propriétéBoundingRectangleProperty |
EVENT_SYSTEM_SCROLLINGEND | Modification de la propriétéVerticalScrollPercentProperty ou HorizontalScrollPercentProperty |
EVENT_SYSTEM_SCROLLINGSTART | Modification de la propriétéVerticalScrollPercentProperty ou HorizontalScrollPercentProperty |
EVENT_SYSTEM_SOUND | Pas d'équivalent |
EVENT_SYSTEM_SWITCHEND | Aucun équivalent, mais un événement AutomationFocusChangedEvent signale qu’une nouvelle application a reçu le focus |
EVENT_SYSTEM_SWITCHSTART | Pas d'équivalent |
Pas d'équivalent | Modification de la propriétéCurrentViewProperty |
Pas d'équivalent | Modification de la propriétéHorizontallyScrollableProperty |
Pas d'équivalent | Modification de la propriétéVerticallyScrollableProperty |
Pas d'équivalent | Modification de la propriétéHorizontalScrollPercentProperty |
Pas d'équivalent | Modification de la propriétéVerticalScrollPercentProperty |
Pas d'équivalent | Modification de la propriétéHorizontalViewSizeProperty |
Pas d'équivalent | Modification de la propriétéVerticalViewSizeProperty |
Pas d'équivalent | Modification de la propriétéToggleStateProperty |
Pas d'équivalent | Modification de la propriétéWindowVisualStateProperty |
Pas d'équivalent | AsyncContentLoadedEvent événement |
Pas d'équivalent | ToolTipOpenedEvent |
Sécurité
Certains IAccessible
scénarios de personnalisation nécessitent d’encapsuler une base IAccessible
et d'y accéder. Cela a des implications en matière de sécurité, car un composant partiellement approuvé ne doit pas être un intermédiaire sur un chemin de code.
Le modèle UI Automation supprime le besoin qu’ont les fournisseurs d’appeler via un autre code de fournisseur. Le service principal UI Automation effectue toutes les agrégations nécessaires.