Automatización de la interfaz de usuario y accesibilidad activa

Microsoft Active Accessibility es la API heredada que se introdujo en Windows 95 y se diseñó para que las aplicaciones de Windows sean accesibles. Microsoft Automatización de la interfaz de usuario es el nuevo modelo de accesibilidad para Windows y está pensado para satisfacer las necesidades de productos tecnológicos de asistencia y herramientas de pruebas automatizadas. Automatización de la interfaz de usuario ofrece muchas mejoras sobre la accesibilidad activa de Microsoft. En este tema se explican las diferencias entre las dos tecnologías.

En este tema se incluyen las siguientes secciones.

Lenguajes de programación

La accesibilidad activa de Microsoft se basa en el modelo de objetos componentes (COM) con compatibilidad con interfaces duales y, por lo tanto, se puede programar en C/C++ y lenguajes de scripting.

Cuando se introdujo Automatización de la interfaz de usuario, la API de cliente se limitaba al código administrado, mientras que la API del proveedor incluía implementaciones administradas y no administradas. Con Windows 7, se introdujo una nueva API de cliente basada en COM para facilitar el programa Automatización de la interfaz de usuario aplicaciones cliente en C/C++.

Servidores y clientes

En Accesibilidad activa de Microsoft, los servidores y los clientes se comunican directamente, en gran medida a través de la implementación del servidor de la interfaz IAccessible .

En Automatización de la interfaz de usuario, un servicio principal se encuentra entre el servidor (proveedor) y el cliente. El servicio principal realiza llamadas a las interfaces implementadas por los proveedores y proporciona servicios adicionales, como la generación de identificadores únicos en tiempo de ejecución para los elementos de la interfaz de usuario. Las aplicaciones cliente obtienen acceso a este servicio principal mediante la creación de un objeto CUIAutomation . Este objeto admite un conjunto de interfaces de cliente que son independientes de las interfaces del proveedor. Para obtener más información, vea Crear el objeto CUIAutomation.

Automatización de la interfaz de usuario proveedores pueden proporcionar información a los clientes de accesibilidad activa de Microsoft y los servidores de accesibilidad activa de Microsoft pueden proporcionar información a Automatización de la interfaz de usuario aplicaciones cliente. Sin embargo, dado que La accesibilidad activa de Microsoft no expone tanta información como Automatización de la interfaz de usuario, los dos modelos no son totalmente compatibles.

Elementos de interfaz de usuario

Microsoft Active Accessibility presenta un elemento de interfaz de usuario como una interfaz IAccessible emparejada con un identificador secundario. Es difícil comparar dos punteros IAccessible para determinar si hacen referencia al mismo elemento.

En Automatización de la interfaz de usuario, cada elemento se representa como un objeto que expone la interfaz IUIAutomationElement a los clientes. Los elementos se pueden comparar mediante sus identificadores en tiempo de ejecución, que se recuperan mediante IUIAutomationElement::GetRuntimeId.

Vistas de árbol y navegación

Los elementos de la interfaz de usuario de la pantalla se pueden ver como una estructura de árbol con el escritorio como raíz, ventanas de aplicación como elementos secundarios inmediatos y elementos dentro de las aplicaciones como descendientes adicionales.

En Accesibilidad activa de Microsoft, muchos elementos de la interfaz de usuario que son irrelevantes para los usuarios finales se exponen en la estructura de árbol. Las aplicaciones cliente deben examinar todos los elementos del árbol para determinar qué elementos son significativos.

Las aplicaciones cliente de la Automatización de la interfaz de usuario ven la UI mediante una vista filtrada. La vista contiene solo elementos que proporcionan información al usuario o con los que el usuario puede interactuar. Las vistas predefinidas que incluyen solo elementos de control y solo los elementos de contenido están disponibles, y las aplicaciones cliente pueden definir vistas personalizadas. Automatización de la interfaz de usuario facilita la descripción de la interfaz de usuario al usuario y ayuda al usuario a interactuar con las aplicaciones.

En Accesibilidad activa de Microsoft, la navegación entre elementos es espacial, por ejemplo, al mover al elemento que se encuentra a la izquierda en la pantalla, lógico, por ejemplo, pasar al siguiente elemento de menú o al siguiente elemento del orden de tabulación en un cuadro de diálogo o jerárquico, por ejemplo, mover al primer elemento secundario de un contenedor o desde un elemento secundario a su elemento primario. La navegación jerárquica es complicada por el hecho de que los elementos secundarios no siempre son objetos que implementan IAccessible.

En Automatización de la interfaz de usuario, todos los elementos de la interfaz de usuario son objetos COM que exponen la interfaz IUIAutomationElement y admiten la misma funcionalidad básica. Desde el punto de vista del proveedor, los objetos COM implementan una interfaz heredada de IRawElementProviderSimple. La navegación es principalmente jerárquica; es decir, de los padres a los hijos, y de un hermano al siguiente. Sin embargo, la navegación entre elementos del mismo nivel tiene un elemento lógico, ya que puede seguir el orden de tabulación. Un cliente puede navegar desde cualquier punto de partida, mediante cualquier vista filtrada del árbol, mediante IUIAutomationTreeWalker. Un cliente también puede navegar a elementos secundarios o descendientes concretos mediante IUIAutomationElement::FindFirst e IUIAutomationElement::FindAll. Por ejemplo, es fácil recuperar todos los elementos de un cuadro de diálogo que admiten un patrón de control especificado.

La navegación en Automatización de la interfaz de usuario es más coherente que en accesibilidad activa de Microsoft. Algunos elementos, como las listas desplegables y las ventanas emergentes, aparecen dos veces en el árbol de accesibilidad activa de Microsoft y la navegación de esos elementos puede tener resultados inesperados. Es difícil implementar correctamente la accesibilidad activa de Microsoft para un control de barras. Automatización de la interfaz de usuario habilita la reposición y el cambio de posición, de modo que un elemento se pueda colocar en cualquier parte del árbol, a pesar de la jerarquía impuesta por la propiedad de las ventanas.

Roles y tipos de control

Microsoft Active Accessibility usa la propiedad accRole (IAccessible::get_accRole) para recuperar una descripción del rol de elemento en la interfaz de usuario, como ROLE_SYSTEM_SLIDER o ROLE_SYSTEM_MENUITEM. El rol de un elemento es la pista principal para su funcionalidad disponible. La interacción con un control se logra mediante métodos fijos como IAccessible::accSelect e IAccessible::accDoDefaultAction. La interacción entre la aplicación cliente y la interfaz de usuario se limita a lo que se puede hacer a través de IAccessible.

En cambio, Automatización de la interfaz de usuario desacopla el tipo de control del elemento, que se describe mediante la propiedad IUIAutomationElement::CurrentControlType (o IUIAutomationElement::CachedControlType) de su funcionalidad esperada. La funcionalidad se determina por los patrones de control admitidos por el proveedor a través de su implementación de interfaces especializadas. Los patrones de control se pueden combinar para describir el conjunto completo de funcionalidades compatibles con un elemento de interfaz de usuario determinado. Algunos proveedores son necesarios para admitir un patrón de control determinado. Por ejemplo, el proveedor de una casilla debe admitir el patrón de control Alternar . Se requieren otros proveedores para admitir uno o varios de un conjunto de patrones de control. Por ejemplo, un botón debe admitir el patrón de control Toggle o Invoke . Otros no admiten patrones de control. Por ejemplo, un panel que no se puede mover, cambiar de tamaño o acoplar no tiene patrones de control.

Automatización de la interfaz de usuario admite controles personalizados, identificados por la constante UIA_CustomControlTypeId y que se pueden describir mediante la propiedad IUIAutomationElement::CurrentLocalizedControlType (o IUIAutomationElement::CachedLocalizedControlType).

En la tabla siguiente seasignan los roles de objeto de accesibilidad activa de Microsoft a Automatización de la interfaz de usuario tipos de control.

Rol de Active Accessibility Tipo de control de la Automatización de la interfaz de usuario
ROLE_SYSTEM_PUSHBUTTON Button
ROLE_SYSTEM_CLIENT Calendario
ROLE_SYSTEM_CHECKBUTTON CheckBox
ROLE_SYSTEM_COMBOBOX ComboBox
ROLE_SYSTEM_CLIENT Consulte Tipos de control personalizados.
ROLE_SYSTEM_LIST DataGrid
ROLE_SYSTEM_LISTITEM DataItem
ROLE_SYSTEM_DOCUMENT Documento
ROLE_SYSTEM_TEXT Editar
ROLE_SYSTEM_GROUPING Grupo
ROLE_SYSTEM_LIST Encabezado
ROLE_SYSTEM_COLUMNHEADER HeaderItem
ROLE_SYSTEM_LINK Hipervínculo
ROLE_SYSTEM_GRAPHIC Imagen
ROLE_SYSTEM_LIST Lista
ROLE_SYSTEM_LISTITEM ListItem
ROLE_SYSTEM_MENUPOPUP Menú
ROLE_SYSTEM_MENUBAR MenuBar
ROLE_SYSTEM_MENUITEM MenuItem
ROLE_SYSTEM_PANE Panel
ROLE_SYSTEM_PROGRESSBAR ProgressBar
ROLE_SYSTEM_RADIOBUTTON RadioButton
ROLE_SYSTEM_SCROLLBAR ScrollBar
ROLE_SYSTEM_SEPARATOR Separator
ROLE_SYSTEM_SLIDER Control deslizante
ROLE_SYSTEM_SPINBUTTON Spinner
ROLE_SYSTEM_SPLITBUTTON SplitButton
ROLE_SYSTEM_STATUSBAR StatusBar
ROLE_SYSTEM_PAGETABLIST Pestaña
ROLE_SYSTEM_PAGETAB TabItem
ROLE_SYSTEM_TABLE Tabla
ROLE_SYSTEM_STATICTEXT Texto
ROLE_SYSTEM_INDICATOR Thumb
ROLE_SYSTEM_TITLEBAR TitleBar
ROLE_SYSTEM_TOOLBAR ToolBar
ROLE_SYSTEM_TOOLTIP ToolTip
ROLE_SYSTEM_OUTLINE Árbol
ROLE_SYSTEM_OUTLINEITEM TreeItem
ROLE_SYSTEM_WINDOW Ventana

 

Estados y propiedades

Los elementos de accesibilidad activa de Microsoft admiten un conjunto común de propiedades. Algunas propiedades, como accState, deben describir condiciones diferentes, en función del rol de elemento. Los servidores deben implementar todos los métodos de IAccessible que devuelven una propiedad, incluso aquellas propiedades que no son relevantes para el elemento.

Automatización de la interfaz de usuario define propiedades adicionales, algunas de las cuales corresponden a los estados de Accesibilidad activa de Microsoft. Algunas propiedades son comunes a todos los elementos, pero otras propiedades son específicas de los tipos de control y los patrones de control. Un proveedor de Automatización de la interfaz de usuario no tiene que implementar propiedades irrelevantes, pero puede devolver un valor NULL para las propiedades que no admite. El servicio principal de Automatización de la interfaz de usuario puede obtener algunas propiedades del proveedor de ventanas predeterminado y se fusiona con propiedades implementadas explícitamente por el proveedor.

Además de admitir muchas más propiedades, Automatización de la interfaz de usuario permite mejorar el rendimiento al permitir que las propiedades se almacenen en caché.

En la tabla siguiente se muestra la correspondencia entre algunas propiedades de los dos modelos. Para obtener descripciones de los identificadores de propiedad de Automatización de la interfaz de usuario, consulte Identificadores de propiedad de elemento de Automation.

Descriptor de acceso de propiedades de Active Accessibility Id. de propiedad de la Automatización de la interfaz de usuario Comentarios
get_accKeyboardShortcut UIA_AccessKeyPropertyId o UIA_AcceleratorKeyPropertyId UIA_AccessKeyPropertyId tiene prioridad si ambos están presentes.
get_accName UIA_NamePropertyId
get_accRole UIA_ControlTypePropertyId Consulte la tabla anterior para asignar roles a tipos de control.
get_accValue UIA_ValueValuePropertyId o UIA_RangeValueValuePropertyId Válido solo para los tipos de control que admiten IUIAutomationValuePattern o IUIAutomationRangeValuePattern. Los valores de intervalo se normalizan en 0-100, para ser coherentes con el comportamiento de accesibilidad activa de Microsoft. Los valores se representan como cadenas.
get_accHelp UIA_HelpTextPropertyId
accLocation UIA_BoundingRectanglePropertyId
get_accDescription No compatible. accDescription no tenía una especificación clara en Accesibilidad activa de Microsoft, lo que dio lugar a que los servidores coloquen diferentes fragmentos de información en esta propiedad.
get_accHelpTopic No compatible.

 

En la tabla siguiente se muestran los identificadores de propiedad Automatización de la interfaz de usuario que corresponden a las constantes de estado del objeto de accesibilidad activa de Microsoft.

Estado de Active Accessibility Propiedad de la Automatización de la interfaz de usuario ¿Desencadena el cambio de estado de WinEvent?
STATE_SYSTEM_CHECKED UIA_ToggleToggleStatePropertyId para la casilla. UIA_SelectionItemIsSelectedPropertyId para el botón de radio. Y
STATE_SYSTEM_COLLAPSED UIA_ExpandCollapseExpandCollapseStatePropertyId (valor = ExpandCollapseState_Collapsed). Y
STATE_SYSTEM_EXPANDED UIA_ExpandCollapseExpandCollapseStatePropertyId (valor = ExpandCollapseState_Expanded o ExpandCollapseState_PartiallyExpanded). Y
STATE_SYSTEM_FOCUSABLE UIA_IsKeyboardFocusablePropertyId. No
STATE_SYSTEM_FOCUSED UIA_HasKeyboardFocusPropertyId. No
STATE_SYSTEM_HASPOPUP UIA_ExpandCollapseExpandCollapseStatePropertyId para los elementos de menú. No
STATE_SYSTEM_INVISIBLE UIA_IsOffscreenPropertyId (valor = True e IUIAutomationElement::GetClickablePoint produce un error). No
STATE_SYSTEM_LINKED UIA_ControlTypePropertyId (valor = UIA_HyperlinkControlTypeId). No
STATE_SYSTEM_MIXED UIA_ToggleToggleStatePropertyId (valor = ToggleState_Indeterminate. No
STATE_SYSTEM_MOVEABLE UIA_TransformCanMovePropertyId. No
STATE_SYSTEM_MULTISELECTABLE UIA_SelectionCanSelectMultiplePropertyId. No
STATE_SYSTEM_OFFSCREEN UIA_IsOffscreenPropertyId. No
STATE_SYSTEM_PROTECTED UIA_IsPasswordPropertyId. No
STATE_SYSTEM_READONLY UIA_RangeValueIsReadOnlyPropertyId y UIA_ValueIsReadOnlyPropertyId. No
STATE_SYSTEM_SELECTABLE UIA_IsSelectionItemPatternAvailablePropertyId . No
STATE_SYSTEM_SELECTED UIA_SelectionItemIsSelectedPropertyId. No
STATE_SYSTEM_SIZEABLE UIA_TransformCanResizePropertyId. No
STATE_SYSTEM_UNAVAILABLE UIA_IsEnabledPropertyId. Y

 

Para obtener una lista completa de los identificadores de propiedad, consulte Identificadores de propiedad.

Eventos

A diferencia de la accesibilidad activa de Microsoft, el mecanismo de eventos de Automatización de la interfaz de usuario, no se basa en el enrutamiento de eventos de Windows, que está estrechamente vinculado a los identificadores de ventana y no requiere que la aplicación cliente configure enlaces. Las suscripciones a eventos se pueden ajustar a determinadas partes del árbol, no solo a eventos concretos. Los proveedores también pueden ajustar la generación de eventos mediante el seguimiento de los eventos que se están escuchando.

También es más fácil que los clientes recuperen los elementos que generan eventos porque se pasan directamente a la devolución de llamada del evento. Las propiedades del elemento se capturan previamente automáticamente, si se proporcionó una solicitud de caché cuando el cliente se suscribió al evento.

En la tabla siguiente se muestra la correspondencia de constantes de eventos de accesibilidad activa de Microsoft y Automatización de la interfaz de usuario identificadores de evento.

WinEvent id. de evento de Automatización de la interfaz de usuario
EVENT_OBJECT_ACCELERATORCHANGE UIA_AcceleratorKeyPropertyId cambio de propiedad.
EVENT_OBJECT_CONTENTSCROLLED UIA_ScrollVerticalScrollPercentPropertyId o UIA_ScrollHorizontalScrollPercentPropertyId propiedad cambian en las barras de desplazamiento asociadas.
EVENT_OBJECT_CREATE UIA_StructureChangedEventId.
EVENT_OBJECT_DEFACTIONCHANGE No equivalente.
EVENT_OBJECT_DESCRIPTIONCHANGE No hay equivalente exacto; quizás UIA_HelpTextPropertyId o UIA_LocalizedControlTypePropertyId cambio de propiedad.
EVENT_OBJECT_DESTROY UIA_StructureChangedEventId.
EVENT_OBJECT_FOCUS UIA_AutomationFocusChangedEventId.
EVENT_OBJECT_HELPCHANGE UIA_HelpTextPropertyId cambio.
EVENT_OBJECT_HIDE UIA_StructureChangedEventId.
EVENT_OBJECT_LOCATIONCHANGE UIA_BoundingRectanglePropertyId cambio de propiedad.
EVENT_OBJECT_NAMECHANGE UIA_NamePropertyId cambio de propiedad.
EVENT_OBJECT_PARENTCHANGE UIA_StructureChangedEventId.
EVENT_OBJECT_REORDER No se usa de forma coherente en accesibilidad activa de Microsoft. No se define directamente ningún evento correspondiente en la Automatización de la interfaz de usuario.
EVENT_OBJECT_SELECTION UIA_SelectionItem_ElementSelectedEventId.
EVENT_OBJECT_SELECTIONADD UIA_SelectionItem_ElementAddedToSelectionEventId.
EVENT_OBJECT_SELECTIONREMOVE UIA_SelectionItem_ElementRemovedFromSelectionEventId.
EVENT_OBJECT_SELECTIONWITHIN No equivalente.
EVENT_OBJECT_SHOW UIA_StructureChangedEventId.
EVENT_OBJECT_STATECHANGE Varios eventos modificados por propiedades.
EVENT_OBJECT_VALUECHANGE UIA_RangeValueValuePropertyId y UIA_ValueValuePropertyId cambiaron.
EVENT_SYSTEM_ALERT No equivalente.
EVENT_SYSTEM_CAPTUREEND No equivalente.
EVENT_SYSTEM_CAPTURESTART No equivalente.
EVENT_SYSTEM_CONTEXTHELPEND No equivalente.
EVENT_SYSTEM_CONTEXTHELPSTART No equivalente.
EVENT_SYSTEM_DIALOGEND UIA_Window_WindowClosedEventId.
EVENT_SYSTEM_DIALOGSTART UIA_Window_WindowOpenedEventId.
EVENT_SYSTEM_DRAGDROPEND No equivalente.
EVENT_SYSTEM_DRAGDROPSTART No equivalente.
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 cambio de propiedad.
EVENT_SYSTEM_MINIMIZESTART UIA_WindowWindowVisualStatePropertyId cambio de propiedad.
EVENT_SYSTEM_MOVESIZEEND UIA_BoundingRectanglePropertyId cambio de propiedad.
EVENT_SYSTEM_MOVESIZESTART UIA_BoundingRectanglePropertyId cambio de propiedad.
EVENT_SYSTEM_SCROLLINGEND UIA_ScrollVerticalScrollPercentPropertyId o UIA_ScrollHorizontalScrollPercentPropertyId cambio de propiedad.
EVENT_SYSTEM_SCROLLINGSTART UIA_ScrollVerticalScrollPercentPropertyId o UIA_ScrollHorizontalScrollPercentPropertyId cambio de propiedad.
EVENT_SYSTEM_SOUND No equivalente.
EVENT_SYSTEM_SWITCHEND No es equivalente, pero un evento de UIA_AutomationFocusChangedEventId indica que una nueva aplicación ha recibido el foco.
EVENT_SYSTEM_SWITCHSTART No equivalente.
No equivalente. UIA_MultipleViewCurrentViewPropertyId cambio de propiedad.
No equivalente. UIA_ScrollHorizontallyScrollablePropertyId cambio de propiedad.
No equivalente. UIA_ScrollVerticallyScrollablePropertyId cambio de propiedad.
No equivalente. UIA_ScrollHorizontalScrollPercentPropertyId cambio de propiedad.
No equivalente. UIA_ScrollVerticalScrollPercentPropertyId cambio de propiedad.
No equivalente. UIA_ScrollHorizontalViewSizePropertyId cambio de propiedad.
No equivalente. UIA_ScrollVerticalViewSizePropertyId cambio de propiedad.
No equivalente. UIA_ToggleToggleStatePropertyId cambio de propiedad.
No equivalente. UIA_WindowWindowVisualStatePropertyId cambio de propiedad
No equivalente. UIA_AsyncContentLoadedEventId evento.
No equivalente. UIA_ToolTipOpenedEventId evento.

 

Acceso a propiedades y objetos de accesibilidad activa desde Automatización de la interfaz de usuario

Una característica clave de Automatización de la interfaz de usuario que no está disponible en accesibilidad activa de Microsoft es la capacidad de capturar varias propiedades con una sola operación entre procesos.

Los clientes existentes de accesibilidad activa de Microsoft pueden aprovechar esta capacidad mediante la interfaz IUIAutomationLegacyIAccessiblePattern . Esta interfaz representa un patrón de control que expone las propiedades y métodos de accesibilidad activa de Microsoft en los elementos de la interfaz de usuario. Al recuperar elementos, una aplicación puede solicitar que este patrón de control y sus propiedades se almacenen en caché.

IUIAutomationLegacyIAccessiblePattern también permite a los clientes obtener propiedades de accesibilidad activa de Microsoft de elementos que no tienen compatibilidad nativa con IAccessible.

Los cambios en las propiedades de un IUIAutomationLegacyIAccessiblePattern no generan eventos Automatización de la interfaz de usuario.

Adición de Automatización de la interfaz de usuario funcionalidad a servidores de accesibilidad activos

Información general sobre el árbol de la UI Automation

Información general acerca de las propiedades de UI Automation

Información general sobre tipos de control de UI Automation

Información general sobre eventos de UI Automation

Microsoft Active Accessibility