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
- Servidores y clientes
- Elementos de interfaz de usuario
- Vistas de árbol y navegación
- Roles y tipos de control
- Estados y propiedades
- Eventos
- Acceso a propiedades y objetos de Active Accessibility desde Automatización de la interfaz de usuario
- Temas relacionados
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.
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.
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.
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.