Pregunta

Tengo un programa que estoy probando que tiene su botón de cierre habilitado en un punto y deshabilitado en otro. UISPIY muestra 'isEnabled' en ambos puntos para ser 'verdaderos' UIAverify shows 'isEnabled' en el primer punto para ser 'verdadero' y en el segundo para ser 'falso'

Esto último es lo que puedo confirmar visualmente como verdadero, mediante programación, obtengo los mismos valores que Uispy y mi caso de prueba está fallando.

usando System.Windows.Automation;

Estructura del árbol: "diálogo" "programa de programa" "barra de título" "programa de programa" "botón" "Cerrar"

¿Alguien consciente de lo que podría estar causando esto? ¿UIA verifica utilizar una biblioteca diferente a la uispy?

¿Fue útil?

Solución

UIA Verify 2.0 utiliza la nueva biblioteca Native Com Uia que se lanzó en la actualización de UIA 3.0 junto con Windows 7 (también disponible como un Hotfix KB971513 separado para Vista y XP SP3). Uispy, por otro lado, creo que usa la API administrada original.

Tuve problemas intermitentes con la biblioteca administrada con el .isEnabled() y .invoke() Métodos que pude corregir migrando a la biblioteca COM, que parecen ser más estables y más rápidos en general que la biblioteca administrada.

No puedo recordar los detalles del proceso de migración, pero básicamente necesitará producir una DLL interops que permita que su aplicación .NET llame a los métodos nativos de UIA. Luego, opcionalmente, puede crear su propia biblioteca de envoltorio o posiblemente usar una de las mencionadas a continuación.

Recomendaría referirse a estos para obtener ayuda para hacer la transición:

  • Adaptador de automatización de la interfaz de usuario - Un intento temprano de crear un envoltorio para la API COM. Tuve problemas para simplemente usar esto, pero fue útil echar un vistazo inicialmente. También busque algunas de las publicaciones del foro de soporte de MSDN sobre la API COM realizada por el desarrollador de este envoltorio. Desafortunadamente, no puedo vincularlos debido a mi Representante Bajo StackOverflow (Lurker desde hace mucho tiempo, Respondador por primera vez).

  • UIA Verificar el código fuente - Puede ver que tienen en su código fuente un uiacomwrapper que se utiliza para acceder a la interfaz COM. También puede echar un vistazo a ese proyecto sobre cómo están produciendo la DLL INEROP.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top