cocoa macos automation carbon

cocoa - CGWindowID desde AXUIElement



macos automation (2)

Estoy tratando de automatizar una aplicación OSX extranjera utilizando la API de accesibilidad. Parte del estado de la aplicación no está disponible a través de la API, por lo que la adquiero a través del raspado de la pantalla. Para hacer esto, necesito obtener CGWindowID para un objeto de accesibilidad con un ''Rol de Ventana''.

¿Hay alguna forma directa de adquirir CGWindowID de un objeto de accesibilidad ''Window Role''? Lo puedo obtener de forma heurística, haciendo coincidir varios atributos de la ventana, como el tamaño, el título y la ubicación, pero esto es realmente raro, y me sentiría mejor si mi aplicación también admitiera los casos de las esquinas, incluso si son poco probables. .


No hay forma de hacer eso; la jerarquía de accesibilidad está completamente desacoplada de la jerarquía de ventana / vista real. Creo que su coincidencia funcionará mejor.


Hay una función de al menos Leopard y superior (y todavía alrededor de 10.7.3):

extern "C" AXError _AXUIElementGetWindow(AXUIElementRef, CGWindowID* out);

Las advertencias habituales sobre el uso de algo como esto se aplican sin embargo. ¡Puede cambiar tan pronto como la próxima actualización del sistema operativo!