Recopilando atajos de teclado para los elementos de menú de otra aplicación.
Estoy escribiendo una aplicación que permite acceder a los elementos del menú de otras aplicaciones a través del marco de accesibilidad. No tengo problemas para obtener la lista de menús, sus elementos de menú, etc.
Sin embargo, hasta donde puedo ver, el marco de accesibilidad no brinda acceso a los atajos de teclado para cada elemento.
Más concretamente, si mi aplicación muestra el elemento de menú “Archivo” -> “Nueva ventana del Finder” del “Finder”, me gustaría anotarlo en la pantalla con “Comando-N”, para que el usuario pueda aprender los atajos de memoria.
Por el momento, no veo ninguna forma de obtener esa información. Si no es a través del marco de accesibilidad “AXUIElement”, ¿cómo se puede obtener esa información?
Cualquier ayuda sería muy apreciada.
davy.ai
Solución para obtener atajos de teclado de elementos de menú a través del marco de accesibilidad
Como ha señalado el OP, el marco de accesibilidad no proporciona una forma directa de acceder a los atajos de teclado de los elementos de menú. Sin embargo, esta información se puede obtener de forma indirecta combinando la información obtenida a través del marco de accesibilidad con la información obtenida de otras fuentes.
Una forma de obtener los atajos de teclado para un elemento de menú en particular es utilizar la clase
NSMenuItem
proporcionada por macOS. Esta clase tiene una propiedad llamadakeyEquivalent
, que devuelve el atajo de teclado asociado con el elemento de menú.Para obtener un objeto
NSMenuItem
para un elemento de menú en particular, puedes utilizar la claseAXUIElement
proporcionada por el marco de accesibilidad para obtener el elemento de la interfaz de usuario para el elemento de menú. Una vez que tienes el elemento de la interfaz de usuario, puedes utilizar el métodoperformAction
para simular un clic en el elemento. Esto hará que se muestre el menú, con el elemento seleccionado resaltado. Luego puedes utilizar la claseNSMenu
proporcionada por macOS para obtener el objetoNSMenuItem
correspondiente al elemento seleccionado y recuperar su atajo de teclado.Aquí tienes un código de ejemplo que muestra cómo se puede hacer esto:
Este código debería mostrar
n
, que es el atajo de teclado para el elemento de menú “Nueva ventana del Finder”.Ten en cuenta que este enfoque puede no funcionar para todos los elementos de menú, especialmente si están anidados en una jerarquía de menús. En tales casos, es posible que necesites utilizar un enfoque recursivo para navegar por la jerarquía de menús y localizar el elemento deseado.