Partager via


UI Automation et accessibilité active

Microsoft Active Accessibility est l’API héritée qui a été introduite dans Windows 95 et a été conçue pour rendre les applications Windows accessibles. Microsoft UI Automation est le nouveau modèle d’accessibilité pour Windows et est destiné à répondre aux besoins des produits de technologie d’assistance et des outils de test automatisés. UI Automation offre de nombreuses améliorations par rapport à Microsoft Active Accessibility. Cette rubrique explique les différences entre les deux technologies.

Cette rubrique contient les sections suivantes.

Langages de programmation

Microsoft Active Accessibility est basé sur le modèle d’objet de composant (COM) avec prise en charge des interfaces doubles et est donc programmable en C/C++ et dans les langages de script.

Lorsque UI Automation a été introduit, l’API cliente était limitée au code managé, tandis que l’API du fournisseur incluait à la fois des implémentations managées et non managées. Avec Windows 7, une nouvelle API cliente basée sur COM a été introduite pour faciliter la programmation des applications clientes UI Automation en C/C++.

Serveurs et clients

Dans Microsoft Active Accessibility, les serveurs et les clients communiquent directement, en grande partie via l’implémentation serveur de l’interface IAccessible .

Dans UI Automation, un service de base se trouve entre le serveur (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 d’interface utilisateur. Les applications clientes accèdent à ce service principal en créant un objet CUIAutomation . Cet objet prend en charge un ensemble d’interfaces clientes distinctes des interfaces du fournisseur. Pour plus d’informations, consultez Création de l’objet CUIAutomation.

UI Automation fournisseurs peuvent fournir des informations aux clients Microsoft Active Accessibility, et les serveurs Microsoft Active Accessibility peuvent fournir des informations à UI Automation applications clientes. Toutefois, étant donné que Microsoft Active Accessibility n’expose pas autant d’informations que UI Automation, les deux modèles ne sont pas entièrement compatibles.

Éléments de l'interface utilisateur

Microsoft Active Accessibility présente un élément d’interface utilisateur sous la forme d’une interface IAccessible associée à un identificateur enfant. Il est difficile de comparer deux pointeurs IAccessibles pour déterminer s’ils font référence au même élément.

Dans UI Automation, chaque élément est représenté sous la forme d’un objet qui expose l’interface IUIAutomationElement aux clients. Les éléments peuvent être comparés par leurs identificateurs d’exécution, qui sont récupérés à l’aide de IUIAutomationElement::GetRuntimeId.

Arborescences et navigation

Les éléments d’interface utilisateur à l’écran peuvent être vus comme une arborescence avec le bureau comme racine, les fenêtres d’application comme enfants immédiats et les éléments dans les applications comme descendants supplémentaires.

Dans Microsoft Active Accessibility, de nombreux éléments d’interface utilisateur qui ne sont pas pertinents pour les utilisateurs finaux sont exposés dans l’arborescence. Les applications clientes doivent examiner tous les éléments de l’arborescence pour déterminer quels éléments sont significatifs.

Les applications clientes UI Automation voient l’interface utilisateur via une vue filtrée. La vue contient uniquement des éléments qui fournissent des informations à l’utilisateur ou avec lesquels l’utilisateur peut interagir. Les vues prédéfinies qui incluent uniquement des éléments de contrôle et uniquement des éléments de contenu sont disponibles, et les applications clientes peuvent définir des vues personnalisées. UI Automation permet de décrire plus facilement l’interface utilisateur à l’utilisateur et d’aider l’utilisateur à interagir avec les applications.

Dans Microsoft Active Accessibility, la navigation entre les éléments est spatiale, par exemple, le déplacement vers l’élément qui se trouve à gauche sur l’écran, logique, par exemple, le passage à 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, le déplacement vers le premier élément enfant d’un conteneur ou d’un élément enfant vers son élément 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 des objets COM qui exposent l’interface IUIAutomationElement et prennent en charge les mêmes fonctionnalités de base. Du point de vue du fournisseur, les objets COM implémentent une interface héritée d’IRawElementProviderSimple. La navigation est principalement hiérarchique ; c’est-à-dire des parents aux enfants et d’un frère à l’autre. Toutefois, la navigation entre frères a un élément logique, car elle peut suivre l’ordre de tabulation. Un client peut naviguer à partir de n’importe quel point de départ, à l’aide d’une vue filtrée de l’arborescence, à l’aide de IUIAutomationTreeWalker. Un client peut également accéder à des enfants ou des descendants particuliers à l’aide de IUIAutomationElement::FindFirst et IUIAutomationElement::FindAll. Par exemple, il est facile de récupérer tous les éléments d’une boîte de dialogue qui prennent en charge un modèle de contrôle spécifié.

La navigation dans UI Automation est plus cohérente que dans Microsoft Active Accessibility. Certains éléments, tels que les listes déroulantes et les fenêtres contextuelles, apparaissent deux fois dans l’arborescence Microsoft Active Accessibility, et la navigation à partir de ces éléments peut avoir des résultats inattendus. Il est difficile d’implémenter correctement Microsoft Active Accessibility pour un contrôle de barre d’armature. UI Automation permet la réparentation et le repositionnement, afin qu’un élément puisse être placé n’importe où dans l’arborescence, malgré la hiérarchie imposée par la propriété des fenêtres.

Rôles et types de contrôle

Microsoft Active Accessibility utilise la propriété accRole (IAccessible::get_accRole) pour récupérer une description du rôle d’é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 le type de contrôle de l’élément, qui est décrit par la propriété IUIAutomationElement::CurrentControlType (ou IUIAutomationElement::CachedControlType) 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 des fonctionnalités prises en charge par un élément d’interface utilisateur particulier. Certains fournisseurs sont nécessaires pour prendre en charge un modèle de contrôle particulier. Par exemple, le fournisseur d’une zone de case activée doit prendre en charge le modèle de contrôle Bascule. D’autres fournisseurs sont nécessaires pour prendre en charge un ou plusieurs des modèles de contrôle. Par exemple, un bouton doit prendre en charge le bouton bascule ou le modèle de contrôle Invoke . D’autres encore ne prennent pas en charge les modèles de contrôle. 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, qui sont identifiés par la constante UIA_CustomControlTypeId et peuvent être décrits par la propriété IUIAutomationElement::CurrentLocalizedControlType (ou IUIAutomationElement::CachedLocalizedControlType).

Le tableau suivant mappeles rôles d’objet Microsoft Active Accessibility à UI Automation types de contrôle.

Rôle Active Accessibility Type de contrôle UI Automation
ROLE_SYSTEM_PUSHBUTTON Button
ROLE_SYSTEM_CLIENT Calendrier
ROLE_SYSTEM_CHECKBUTTON CheckBox
ROLE_SYSTEM_COMBOBOX ComboBox
ROLE_SYSTEM_CLIENT Consultez Types de contrôles personnalisés.
ROLE_SYSTEM_LIST DataGrid
ROLE_SYSTEM_LISTITEM DataItem
ROLE_SYSTEM_DOCUMENT Document
ROLE_SYSTEM_TEXT Modifier
ROLE_SYSTEM_GROUPING Groupe
ROLE_SYSTEM_LIST En-tête
ROLE_SYSTEM_COLUMNHEADER HeaderItem
ROLE_SYSTEM_LINK Lien hypertexte
ROLE_SYSTEM_GRAPHIC Image
ROLE_SYSTEM_LIST Liste
ROLE_SYSTEM_LISTITEM ListItem
ROLE_SYSTEM_MENUPOPUP Menu
ROLE_SYSTEM_MENUBAR MenuBar
ROLE_SYSTEM_MENUITEM MenuItem
ROLE_SYSTEM_PANE Volet
ROLE_SYSTEM_PROGRESSBAR ProgressBar
ROLE_SYSTEM_RADIOBUTTON RadioButton
ROLE_SYSTEM_SCROLLBAR Scrollbar
ROLE_SYSTEM_SEPARATOR Separator
ROLE_SYSTEM_SLIDER Curseur
ROLE_SYSTEM_SPINBUTTON Spinner
ROLE_SYSTEM_SPLITBUTTON SplitButton
ROLE_SYSTEM_STATUSBAR StatusBar
ROLE_SYSTEM_PAGETABLIST Onglet
ROLE_SYSTEM_PAGETAB TabItem
ROLE_SYSTEM_TABLE Table
ROLE_SYSTEM_STATICTEXT Text
ROLE_SYSTEM_INDICATOR Pouce
ROLE_SYSTEM_TITLEBAR TitleBar
ROLE_SYSTEM_TOOLBAR Toolbar
ROLE_SYSTEM_TOOLTIP ToolTip
ROLE_SYSTEM_OUTLINE Arborescence
ROLE_SYSTEM_OUTLINEITEM TreeItem
ROLE_SYSTEM_WINDOW Window

 

États et propriétés

Les éléments Microsoft Active Accessibility prennent en charge un ensemble commun de propriétés. Certaines propriétés, telles que accState, doivent décrire différentes conditions, selon le rôle de l’élément. Les serveurs doivent implémenter toutes les méthodes d’IAccessible qui retournent une propriété, même celles qui ne sont pas pertinentes pour l’élément .

UI Automation définit des propriétés supplémentaires, dont certaines correspondent à des états dans Microsoft Active Accessibility. Certaines propriétés sont communes à tous les éléments, mais d’autres sont spécifiques aux types de contrôle et aux modèles de contrôle. Un fournisseur de UI Automation n’a pas besoin d’implémenter des propriétés non pertinentes, mais peut retourner une valeur Null pour toutes les propriétés qu’il ne prend pas en charge. Le service principal UI Automation peut obtenir certaines propriétés du fournisseur de fenêtres par défaut, qui sont fusionnées avec des propriétés explicitement implémentées par le fournisseur.

En plus de prendre en charge de nombreuses autres propriétés, UI Automation permet de meilleures performances en autorisant la mise en cache des propriétés.

Le tableau suivant montre la correspondance entre certaines propriétés dans les deux modèles. Pour obtenir une description des ID de propriété UI Automation, consultez Identificateurs de propriété d’élément Automation.

Accesseur de propriété Active Accessibility ID de propriété UI Automation Notes
get_accKeyboardShortcut UIA_AccessKeyPropertyId ou UIA_AcceleratorKeyPropertyId UIA_AccessKeyPropertyId est prioritaire si les deux sont présents.
get_accName UIA_NamePropertyId
get_accRole UIA_ControlTypePropertyId Consultez le tableau précédent pour le mappage des rôles aux types de contrôle.
get_accValue UIA_ValueValuePropertyId ou UIA_RangeValueValuePropertyId Valide uniquement pour les types de contrôles qui prennent en charge IUIAutomationValuePattern ou IUIAutomationRangeValuePattern. Les valeurs de plage sont normalisées à 0-100, pour être cohérentes avec le comportement de Microsoft Active Accessibility. Les valeurs sont représentées sous forme de chaînes.
get_accHelp UIA_HelpTextPropertyId
accLocation UIA_BoundingRectanglePropertyId
get_accDescription Non pris en charge. accDescription n’avait pas de spécification claire dans Microsoft Active Accessibility, ce qui a conduit les serveurs à placer différentes informations dans cette propriété.
get_accHelpTopic Non pris en charge.

 

Le tableau suivant montre les ID de propriété UI Automation qui correspondent aux constantes d’état de l’objet Microsoft Active Accessibility.

État Active Accessibility Propriété UI Automation Déclenche un changement d’état WinEvent ?
STATE_SYSTEM_CHECKED UIA_ToggleToggleStatePropertyId pour case activée zone. UIA_SelectionItemIsSelectedPropertyId pour la case d’option. O
STATE_SYSTEM_COLLAPSED UIA_ExpandCollapseExpandCollapseStatePropertyId (valeur = ExpandCollapseState_Collapsed). O
STATE_SYSTEM_EXPANDED UIA_ExpandCollapseExpandCollapseStatePropertyId (valeur = ExpandCollapseState_Expanded ou ExpandCollapseState_PartiallyExpanded). O
STATE_SYSTEM_FOCUSABLE UIA_IsKeyboardFocusablePropertyId. N
STATE_SYSTEM_FOCUSED UIA_HasKeyboardFocusPropertyId. N
STATE_SYSTEM_HASPOPUP UIA_ExpandCollapseExpandCollapseStatePropertyId pour les éléments de menu. N
STATE_SYSTEM_INVISIBLE UIA_IsOffscreenPropertyId (value = True et IUIAutomationElement::GetClickablePoint échoue). N
STATE_SYSTEM_LINKED UIA_ControlTypePropertyId (valeur = UIA_HyperlinkControlTypeId). N
STATE_SYSTEM_MIXED UIA_ToggleToggleStatePropertyId (value = ToggleState_Indeterminate. N
STATE_SYSTEM_MOVEABLE UIA_TransformCanMovePropertyId. N
STATE_SYSTEM_MULTISELECTABLE UIA_SelectionCanSelectMultiplePropertyId. N
STATE_SYSTEM_OFFSCREEN UIA_IsOffscreenPropertyId. N
STATE_SYSTEM_PROTECTED UIA_IsPasswordPropertyId. N
STATE_SYSTEM_READONLY UIA_RangeValueIsReadOnlyPropertyId et UIA_ValueIsReadOnlyPropertyId. N
STATE_SYSTEM_SELECTABLE UIA_IsSelectionItemPatternAvailablePropertyId . N
STATE_SYSTEM_SELECTED UIA_SelectionItemIsSelectedPropertyId. N
STATE_SYSTEM_SIZEABLE UIA_TransformCanResizePropertyId. N
STATE_SYSTEM_UNAVAILABLE UIA_IsEnabledPropertyId. O

 

Pour obtenir la liste complète des ID de propriété, consultez Identificateurs de propriétés.

Événements

Contrairement à Microsoft Active Accessibility, le mécanisme d’événement dans UI Automation, ne repose pas sur le routage des événements Windows, qui est étroitement lié aux handles de fenêtre et ne nécessite pas que l’application cliente configure des connexions. Les abonnements aux événements peuvent être ajustés à des parties particulières de l’arborescence, pas seulement à des événements particuliers. Les fournisseurs peuvent également affiner les événements d’élévation en effectuant 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 ceux-ci sont passés directement au rappel d’événement. Les propriétés de l’élément sont automatiquement prédéfinies, si une demande de cache a été fournie lorsque le client s’est abonné à l’événement.

Le tableau suivant montre la correspondance des constantes d’événement Microsoft Active Accessibility et des ID d’événement UI Automation.

WinEvent ID d’événement UI Automation
EVENT_OBJECT_ACCELERATORCHANGE UIA_AcceleratorKeyPropertyId modification de propriété.
EVENT_OBJECT_CONTENTSCROLLED UIA_ScrollVerticalScrollPercentPropertyId ou UIA_ScrollHorizontalScrollPercentPropertyId modification de propriété sur les barres de défilement associées.
EVENT_OBJECT_CREATE UIA_StructureChangedEventId.
EVENT_OBJECT_DEFACTIONCHANGE Aucun équivalent.
EVENT_OBJECT_DESCRIPTIONCHANGE Pas d’équivalent exact; peut-être UIA_HelpTextPropertyId ou UIA_LocalizedControlTypePropertyId changement de propriété.
EVENT_OBJECT_DESTROY UIA_StructureChangedEventId.
EVENT_OBJECT_FOCUS UIA_AutomationFocusChangedEventId.
EVENT_OBJECT_HELPCHANGE UIA_HelpTextPropertyId modification.
EVENT_OBJECT_HIDE UIA_StructureChangedEventId.
EVENT_OBJECT_LOCATIONCHANGE UIA_BoundingRectanglePropertyId modification de propriété.
EVENT_OBJECT_NAMECHANGE UIA_NamePropertyId modification de propriété.
EVENT_OBJECT_PARENTCHANGE UIA_StructureChangedEventId.
EVENT_OBJECT_REORDER Non utilisé de manière cohérente dans Microsoft Active Accessibility. Aucun événement directement correspondant n’est défini dans UI Automation.
EVENT_OBJECT_SELECTION UIA_SelectionItem_ElementSelectedEventId.
EVENT_OBJECT_SELECTIONADD UIA_SelectionItem_ElementAddedToSelectionEventId.
EVENT_OBJECT_SELECTIONREMOVE UIA_SelectionItem_ElementRemovedFromSelectionEventId.
EVENT_OBJECT_SELECTIONWITHIN Aucun équivalent.
EVENT_OBJECT_SHOW UIA_StructureChangedEventId.
EVENT_OBJECT_STATECHANGE Divers événements modifiés par des propriétés.
EVENT_OBJECT_VALUECHANGE UIA_RangeValueValuePropertyId et UIA_ValueValuePropertyId modifiés.
EVENT_SYSTEM_ALERT Aucun équivalent.
EVENT_SYSTEM_CAPTUREEND Aucun équivalent.
EVENT_SYSTEM_CAPTURESTART Aucun équivalent.
EVENT_SYSTEM_CONTEXTHELPEND Aucun équivalent.
EVENT_SYSTEM_CONTEXTHELPSTART Aucun équivalent.
EVENT_SYSTEM_DIALOGEND UIA_Window_WindowClosedEventId.
EVENT_SYSTEM_DIALOGSTART UIA_Window_WindowOpenedEventId.
EVENT_SYSTEM_DRAGDROPEND Aucun équivalent.
EVENT_SYSTEM_DRAGDROPSTART Aucun équivalent.
EVENT_SYSTEM_FOREGROUND UIA_AutomationFocusChangedEventId.
EVENT_SYSTEM_MENUEND UIA_MenuModeEndEventId.
EVENT_SYSTEM_MENUPOPUPEND UIA_MenuClosedEventId.
EVENT_SYSTEM_MENUPOPUPSTART UIA_MenuOpenedEventId.
EVENT_SYSTEM_MENUSTART UIA_MenuModeStartEventId.
EVENT_SYSTEM_MINIMIZEEND UIA_WindowWindowVisualStatePropertyId modification de propriété.
EVENT_SYSTEM_MINIMIZESTART UIA_WindowWindowVisualStatePropertyId modification de propriété.
EVENT_SYSTEM_MOVESIZEEND UIA_BoundingRectanglePropertyId modification de propriété.
EVENT_SYSTEM_MOVESIZESTART UIA_BoundingRectanglePropertyId modification de propriété.
EVENT_SYSTEM_SCROLLINGEND UIA_ScrollVerticalScrollPercentPropertyId ou UIA_ScrollHorizontalScrollPercentPropertyId modification de propriété.
EVENT_SYSTEM_SCROLLINGSTART UIA_ScrollVerticalScrollPercentPropertyId ou UIA_ScrollHorizontalScrollPercentPropertyId modification de propriété.
EVENT_SYSTEM_SOUND Aucun équivalent.
EVENT_SYSTEM_SWITCHEND Aucun équivalent, mais un événement UIA_AutomationFocusChangedEventId signale qu’une nouvelle application a reçu le focus.
EVENT_SYSTEM_SWITCHSTART Aucun équivalent.
Aucun équivalent. UIA_MultipleViewCurrentViewPropertyId modification de propriété.
Aucun équivalent. UIA_ScrollHorizontallyScrollablePropertyId modification de propriété.
Aucun équivalent. UIA_ScrollVerticallyScrollablePropertyId modification de propriété.
Aucun équivalent. UIA_ScrollHorizontalScrollPercentPropertyId modification de propriété.
Aucun équivalent. UIA_ScrollVerticalScrollPercentPropertyId modification de propriété.
Aucun équivalent. UIA_ScrollHorizontalViewSizePropertyId modification de propriété.
Aucun équivalent. UIA_ScrollVerticalViewSizePropertyId modification de propriété.
Aucun équivalent. UIA_ToggleToggleStatePropertyId modification de propriété.
Aucun équivalent. UIA_WindowWindowVisualStatePropertyId modification de la propriété
Aucun équivalent. UIA_AsyncContentLoadedEventId événement.
Aucun équivalent. UIA_ToolTipOpenedEventId événement.

 

Accès aux propriétés et objets d’accessibilité active à partir de UI Automation

Une fonctionnalité clé de UI Automation qui n’est pas disponible dans Microsoft Active Accessibility est la possibilité d’extraire plusieurs propriétés avec une seule opération inter-processus.

Les clients Microsoft Active Accessibility existants peuvent tirer parti de cette fonctionnalité à l’aide de l’interface IUIAutomationLegacyIAccessiblePattern . Cette interface représente un modèle de contrôle qui expose les propriétés et méthodes Microsoft Active Accessibility sur les éléments d’interface utilisateur. Lors de la récupération d’éléments, une application peut demander que ce modèle de contrôle et ses propriétés soient mis en cache.

IUIAutomationLegacyIAccessiblePattern permet également aux clients d’obtenir des propriétés Microsoft Active Accessibility à partir d’éléments qui n’ont pas de prise en charge native pour IAccessible.

Les modifications apportées aux propriétés d’un IUIAutomationLegacyIAccessiblePattern ne déclenchent pas d’événements UI Automation.

Ajout de fonctionnalités UI Automation aux serveurs d’accessibilité actifs

Vue d’ensemble de l’arborescence UI Automation

Vue d'ensemble des propriétés UI Automation

Vue d'ensemble des types de contrôle UI Automation

Vue d'ensemble des événements UI Automation

Microsoft Active Accessibility