Compartir a través de


Automatización de la interfaz de usuario y Active Accessibility

Microsoft Active Accessibility es la API heredada que se introdujo en Windows 95 y que se diseñó para que se pudiera acceder a las aplicaciones de Windows. La automatización de la interfaz de usuario de Microsoft es el nuevo modelo de accesibilidad para Windows y está pensado para abordar las necesidades de los productos de tecnología de asistencia y herramientas de prueba automatizadas. Automatización de la interfaz de usuario ofrece muchas mejoras con respecto a Microsoft Active Accessibility. En este tema se explican las diferencias entre las dos tecnologías.

En este tema se incluyen las siguientes secciones.

Lenguajes de programación

Microsoft Active Accessibility se basa en el modelo de objetos componentes (COM) con compatibilidad para interfaces duales y, por 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 la programación de aplicaciones cliente de UI Automation en C/C++.

Servidores y clientes

En Microsoft Active Accessibility, los servidores y los clientes se comunican directamente, en gran medida a través de la implementación de 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 ofrece servicios adicionales como la generación de identificadores únicos en tiempo de ejecución para los elementos de IU. 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 independientes de las interfaces de proveedor. Para obtener más información, consulte Creación del objeto CUIAutomation.

Los proveedores de Automatización de la interfaz de usuario pueden proporcionar información a los clientes de Microsoft Active Accessibility y los servidores de Microsoft Active Accessibility pueden proporcionar información a las aplicaciones cliente de Automatización de la interfaz de usuario. Sin embargo, dado que Microsoft Active Accessibility 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 IU de la pantalla pueden verse como una estructura de árbol con el escritorio como la raíz, las ventanas de la aplicación como elementos secundarios inmediatos y los elementos que se encuentran dentro de las aplicaciones como descendientes más lejanos.

En Microsoft Active Accessibility, 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. Hay vistas predefinidas que incluyen solo elementos de control y solo elementos de contenido; además, las aplicaciones 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 Microsoft Active Accessibility, la navegación entre elementos es espacial, por ejemplo, desplazarse al elemento que se encuentra a la izquierda de la pantalla, lógica, por ejemplo, moverse al siguiente elemento de menú o el siguiente elemento en el orden de tabulación dentro de un cuadro de diálogo o jerárquica, por ejemplo, mover al primer elemento secundario de un contenedor o desde un elemento secundario a su elemento principal. La navegación jerárquica resulta 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 elementos principales a secundarios, y de un elemento del mismo nivel 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, con IUIAutomationTreeWalker. Un cliente también puede navegar a elementos secundarios o descendientes concretos mediante IUIAutomationElement::FindFirst y 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 Microsoft Active Accessibility. Algunos elementos como las listas desplegables y las ventanas emergentes aparecen dos veces en el árbol de Microsoft Active Accessibility y la navegación desde esos elementos puede tener resultados inesperados. Es difícil implementar correctamente Microsoft Active Accessibility para un control rebar. La Automatización de la interfaz de usuario habilita la reorganización dinámica de relación jerárquica y el cambio de posición, para que un elemento se pueda colocar en cualquier lugar 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 y IAccessible::accDoDefaultAction. La interacción entre la aplicación cliente y la IU se limita a lo que se puede hacer mediante 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), a partir 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 la funcionalidad admitida por un determinado elemento de IU. 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 requiere que otros proveedores admitan uno o más de un conjunto de patrones de control. Por ejemplo, un botón debe admitir el patrón de control Alternar o Invocar. Otros no admiten ningún patrón 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, que se identifican mediante la constante UIA_CustomControlTypeId y se puede describir mediante la propiedad IUIAutomationElement::CurrentLocalizedControlType (o IUIAutomationElement::CachedLocalizedControlType).

En la tabla siguiente se asignan los roles de objeto de Microsoft Active Accessibility a los tipos de control de Automatización de la interfaz de usuario.

Rol de Active Accessibility Tipo de control de la Automatización de la interfaz de usuario
ROLE_SYSTEM_PUSHBUTTON Botón
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 Document
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 List
ROLE_SYSTEM_LISTITEM ListItem
ROLE_SYSTEM_MENUPOPUP Menu
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 Tab
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 Tree
ROLE_SYSTEM_OUTLINEITEM TreeItem
ROLE_SYSTEM_WINDOW Window

 

Estados y propiedades

Los elementos de Microsoft Active Accessibility 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 devuelvan una propiedad, incluso aquellas propiedades que no son pertinentes para el elemento.

Automatización de la interfaz de usuario define propiedades adicionales, algunas de las cuales corresponden a estados de Microsoft Active Accessibility. Algunas propiedades son comunes para todos los elementos, pero otras son específicas de tipos de control y patrones de control. Un proveedor de la automatización de la interfaz de usuario no tiene que implementar propiedades irrelevantes, pero puede devolver un valor nulo para cualquier propiedad que no admita. Además, el servicio principal de la automatización de la interfaz de usuario puede obtener algunas propiedades del proveedor de ventana predeterminado y estas se combinan con propiedades implementadas de manera explícita 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 Automatización.

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 Vea 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 a 0-100, para ser coherentes con el comportamiento de Microsoft Active Accessibility. Los valores se representan como cadenas.
get_accHelp UIA_HelpTextPropertyId
accLocation UIA_BoundingRectanglePropertyId
get_accDescription No admitida. accDescription no tenía una especificación clara en Microsoft Active Accessibility, lo que dio lugar a que los servidores colocara diferentes fragmentos de información en esta propiedad.
get_accHelpTopic No admitida.

 

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

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 casilla de verificación. UIA_SelectionItemIsSelectedPropertyId para 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. N
STATE_SYSTEM_FOCUSED UIA_HasKeyboardFocusPropertyId. N
STATE_SYSTEM_HASPOPUP UIA_ExpandCollapseExpandCollapseStatePropertyId for opciones de menú. N
STATE_SYSTEM_INVISIBLE UIA_IsOffscreenPropertyId (valor = True y IUIAutomationElement::GetClickablePoint falla). N
STATE_SYSTEM_LINKED UIA_ControlTypePropertyId (valor = UIA_HyperlinkControlTypeId). N
STATE_SYSTEM_MIXED UIA_ToggleToggleStatePropertyId (valor = 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 y 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. Y

 

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

Eventos

A diferencia de Microsoft Active Accessibility, el mecanismo de eventos en Automatización de la interfaz de usuario no se basa en el enrutamiento de eventos de Windows, que está estrechamente relacionado con los identificadores de ventana, y no requiere la aplicación cliente para configurar enlaces. Las suscripciones a eventos se pueden ajustar no solo para eventos concretos, sino también para partes específicas del árbol. Los proveedores también pueden ajustar su generación de eventos mediante el mantenimiento del seguimiento de qué eventos se están escuchando.

También resulta más sencillo para los clientes recuperar los elementos que generan eventos, ya que estos se pasan directamente a la devolución de llamada de evento. Las propiedades del elemento se recuperan previamente de manera automática si se había proporcionado una solicitud de caché cuando el cliente se suscribió al evento.

En la tabla siguiente se muestra la correspondencia de las constantes de eventos de Microsoft Active Accessibility y los identificadores de eventos de Automatización de la interfaz de usuario.

WinEvent ID de evento de automatización de la interfaz de usuario
EVENT_OBJECT_ACCELERATORCHANGE Cambio de propiedad UIA_AcceleratorKeyPropertyId.
EVENT_OBJECT_CONTENTSCROLLED Cambio de propiedad UIA_ScrollVerticalScrollPercentPropertyId o UIA_ScrollHorizontalScrollPercentPropertyId 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 el cambio de propiedad UIA_HelpTextPropertyId o UIA_LocalizedControlTypePropertyId.
EVENT_OBJECT_DESTROY UIA_StructureChangedEventId.
EVENT_OBJECT_FOCUS UIA_AutomationFocusChangedEventId.
EVENT_OBJECT_HELPCHANGE Cambio UIA_HelpTextPropertyId.
EVENT_OBJECT_HIDE UIA_StructureChangedEventId.
EVENT_OBJECT_LOCATIONCHANGE Cambio de propiedad UIA_BoundingRectanglePropertyId.
EVENT_OBJECT_NAMECHANGE Cambio de propiedad UIA_NamePropertyId.
EVENT_OBJECT_PARENTCHANGE UIA_StructureChangedEventId.
EVENT_OBJECT_REORDER No se usa de forma coherente en Microsoft Active Accessibility. 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 Diversos eventos de cambio de propiedad.
EVENT_OBJECT_VALUECHANGE Cambio de UIA_RangeValueValuePropertyId y UIA_ValueValuePropertyId.
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 Cambio de propiedad UIA_WindowWindowVisualStatePropertyId.
EVENT_SYSTEM_MINIMIZESTART Cambio de propiedad UIA_WindowWindowVisualStatePropertyId.
EVENT_SYSTEM_MOVESIZEEND Cambio de propiedad UIA_BoundingRectanglePropertyId.
EVENT_SYSTEM_MOVESIZESTART Cambio de propiedad UIA_BoundingRectanglePropertyId.
EVENT_SYSTEM_SCROLLINGEND Cambio de propiedad UIA_ScrollVerticalScrollPercentPropertyId o UIA_ScrollHorizontalScrollPercentPropertyId.
EVENT_SYSTEM_SCROLLINGSTART Cambio de propiedad UIA_ScrollVerticalScrollPercentPropertyId o UIA_ScrollHorizontalScrollPercentPropertyId.
EVENT_SYSTEM_SOUND No equivalente.
EVENT_SYSTEM_SWITCHEND Ningún equivalente, pero un evento UIA_AutomationFocusChangedEventId señala que una nueva aplicación ha recibido el enfoque.
EVENT_SYSTEM_SWITCHSTART No equivalente.
No equivalente. Cambio de propiedad UIA_MultipleViewCurrentViewPropertyId.
No equivalente. Cambio de propiedad UIA_ScrollHorizontallyScrollablePropertyId.
No equivalente. Cambio de propiedad UIA_ScrollVerticallyScrollablePropertyId.
No equivalente. Cambio de propiedad UIA_ScrollHorizontalScrollPercentPropertyId.
No equivalente. Cambio de propiedad UIA_ScrollVerticalScrollPercentPropertyId.
No equivalente. Cambio de propiedad UIA_ScrollHorizontalViewSizePropertyId.
No equivalente. Cambio de propiedad UIA_ScrollVerticalViewSizePropertyId.
No equivalente. Cambio de propiedad UIA_ToggleToggleStatePropertyId.
No equivalente. Cambio de propiedad UIA_WindowWindowVisualStatePropertyId
No equivalente. Evento UIA_AsyncContentLoadedEventId.
No equivalente. Evento UIA_ToolTipOpenedEventId.

 

Acceso a propiedades y objetos de Active Accessibility 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 Microsoft Active Accessibility es la capacidad de capturar varias propiedades con una sola operación entre procesos.

Los clientes existentes de Microsoft Active Accessibility pueden aprovechar esta capacidad mediante la interfaz IUIAutomationLegacyIAccessiblePattern. Esta interfaz representa un patrón de control que expone las propiedades y métodos de Microsoft Active Accessibility 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 Microsoft Active Accessibility de elementos que no tienen compatibilidad nativa con IAccessible.

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

Adición de la funcionalidad de Automatización de la interfaz de usuario en servidores Active Accessibility

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