Almacenar en caché Automatización de la interfaz de usuario propiedades y patrones de control

Al usar Microsoft Automatización de la interfaz de usuario, los clientes a menudo necesitan recuperar varias propiedades para varios elementos de automatización. Un cliente podría recuperar propiedades individuales de un elemento a la vez mediante los métodos de recuperación de propiedades como IUIAutomationElement::CurrentName o CurrentAccessKey. Sin embargo, este método es lento e ineficaz porque requiere una llamada entre procesos para cada propiedad que se va a recuperar. Para mejorar el rendimiento, los clientes pueden usar las funcionalidades de almacenamiento en caché (también denominada captura masiva) de Automatización de la interfaz de usuario. El almacenamiento en caché permite a un cliente recuperar todas las propiedades deseadas para todos los elementos deseados con una sola llamada de método. Después, el cliente puede recuperar las propiedades individuales de la memoria caché según sea necesario y puede obtener una nueva instantánea de la caché periódicamente, generalmente en respuesta a eventos que significan cambios en la interfaz de usuario.

La aplicación puede solicitar el almacenamiento en caché cuando recupera un elemento de Automatización de la interfaz de usuario mediante un método, como IUIAutomation::ElementFromPointBuildCache, IUIAutomationTreeWalker::GetFirstChildElementBuildCache o IUIAutomationElement::FindFirstBuildCache.

El almacenamiento en caché también se produce cuando se especifica una solicitud de caché mientras se suscribe a eventos. El elemento Automatización de la interfaz de usuario pasado al controlador de eventos como origen de un evento contiene las propiedades almacenadas en caché y los patrones de control especificados por la solicitud de caché. Los cambios realizados en la solicitud de caché después de suscribirse al evento no tienen ningún efecto.

En este tema se incluyen las siguientes secciones.

Solicitudes de caché

El almacenamiento en caché implica determinar las propiedades que se van a recuperar y de qué elementos recuperar y, a continuación, usar esta información para crear una solicitud de caché. Cada vez que el cliente obtiene una interfaz IUIAutomationElement para el elemento de interfaz de usuario, Automatización de la interfaz de usuario almacena en caché la información especificada en la solicitud de caché.

Para crear una solicitud de caché, empiece por usar el método IUIAutomation::CreateCacheRequest para recuperar un puntero de interfaz IUIAutomationCacheRequest . A continuación, configure la solicitud de caché mediante los métodos de IUIAutomationCacheRequest.

Especificar patrones de propiedad y control para almacenar en caché

Puede especificar propiedades para almacenar en caché llamando a IUIAutomationCacheRequest::AddProperty. Puede especificar patrones de control para almacenar en caché llamando a IUIAutomationCacheRequest::AddPattern. Cuando se almacena en caché un patrón de control, sus propiedades no se almacenan automáticamente en caché; Debe especificar las propiedades que desea almacenar en caché mediante AddProperty.

Puede recuperar una propiedad de patrón de control (por ejemplo, la propiedad Value del patrón de control Value ), sin tener que recuperar todo el patrón de control en la memoria caché. Solo debe recuperar el patrón de control si necesita usar un método de patrón de control.

Especificar el ámbito y el filtrado de una solicitud de almacenamiento en caché

Puede especificar los elementos cuyas propiedades y patrones de control desea almacenar en caché estableciendo la propiedad IUIAutomationCacheRequest::TreeScope antes de usar la solicitud. El ámbito es relativo a los elementos recuperados por el método al que se pasa la solicitud de caché. Por ejemplo, si establece solo TreeScope_Children y, a continuación, recupera un elemento Automatización de la interfaz de usuario, las propiedades y los patrones de control de los elementos secundarios de ese elemento se almacenan en caché, pero las propiedades y los patrones de control del propio elemento no se almacenan en caché. Para asegurarse de que el almacenamiento en caché se realiza para el propio elemento recuperado, debe incluir TreeScope_Element en la propiedad IUIAutomationCacheRequest::TreeScope . No es posible establecer el ámbito en TreeScope_Parent o TreeScope_Ancestors. Sin embargo, es posible almacenar en caché un elemento primario cuando se almacena un elemento secundario en caché; consulte la sección Recuperación de elementos primarios y secundarios almacenados en caché de este tema.

La extensión del almacenamiento en caché también se ve afectada por la propiedad IUIAutomationCacheRequest::TreeFilter . De forma predeterminada, el almacenamiento en caché se realiza solo para los elementos que aparecen en la vista de control del árbol de la automatización de la interfaz de usuario. Sin embargo, puede cambiar esta propiedad para aplicar el almacenamiento en caché a todos los elementos o solo a los que aparecen en la vista de contenido.

Intensidad de las referencias de elementos

Al recuperar un elemento de automatización, de forma predeterminada tiene acceso a todas las propiedades y patrones de control de ese elemento, incluidas las propiedades y los patrones de control que no se almacenaron en caché. Sin embargo, puede especificar que la referencia al elemento solo hace referencia a datos almacenados en caché estableciendo la propiedad IUIAutomationCacheRequest::AutomationElementMode en AutomationElementMode_None. En este caso, no tiene acceso a ninguna propiedad sin almacenar en caché ni a patrones de control de elementos recuperados. Esto significa que no se puede acceder a ninguna propiedad actual, como IUIAutomationElement::CurrentIsEnabled o recuperar un patrón de control mediante IUIAutomationElement::GetCurrentPattern. En los patrones de control almacenados en caché, no puede llamar a métodos que realicen acciones en el control, como IUIAutomationInvokePattern::Invoke.

Un ejemplo de una aplicación que podría no necesitar referencias completas a objetos es un lector de pantalla, que podría capturar previamente las propiedades de nombre y tipo de control de los elementos en una ventana sin necesidad de los propios objetos de elemento de automatización.

Recuperación de elementos primarios y secundarios almacenados en caché

Al recuperar un elemento de automatización y solicitar el almacenamiento en caché para los elementos secundarios de ese elemento a través de la propiedad IUIAutomationCacheRequest::TreeScope de la solicitud, es posible obtener los elementos secundarios mediante una llamada a IUIAutomationElement::GetCachedChildren en el elemento que recuperó.

Si TreeScope_Element se incluyó en el ámbito de la solicitud de caché, el elemento raíz de la solicitud se puede recuperar llamando a IUIAutomationElement::GetCachedParent en cualquiera de los elementos secundarios.

Nota

No se pueden almacenar en caché los elementos primarios o antecesores del elemento raíz de la solicitud.

 

Recuperación de una nueva instantánea de la memoria caché

La caché solo es válida siempre y cuando no cambie nada en la interfaz de usuario. La aplicación es responsable de recuperar una nueva instantánea de la memoria caché, normalmente, en respuesta a eventos.

Si se suscribe a un evento con una solicitud de caché, obtendrá una nueva instantánea IUIAutomationElement de la memoria caché como origen del evento siempre que se llame al controlador de eventos. También puede recuperar una nueva instantánea de información almacenada en caché para un elemento mediante una llamada a IUIAutomationElement::BuildUpdatedCache. Puede pasar el IUIAutomationCacheRequest original para obtener una nueva instantánea de toda la información almacenada previamente en caché.

La recuperación de una nueva instantánea de la memoria caché no modifica las propiedades de ninguna referencia existente de IUIAutomationElement .

Ejemplos

Para ver ejemplos de código que muestran cómo usar las funcionalidades de almacenamiento en caché de Automatización de la interfaz de usuario, consulte Uso del almacenamiento en caché.

Conceptual

Información general acerca de los patrones de control de UI Automation

Obtener elementos de UI Automation

Información general acerca de las propiedades de UI Automation