0 votos

UI Applescript portátil para elegir cualquier elemento del menú a través de cualquier jerarquía de submenús

En la parte inferior de esta página Apple explica cómo utilizar las secuencias de comandos de la interfaz de usuario para automatizar la selección de elementos del menú. Hay dos ejemplos codificados en los que me estoy basando en un esfuerzo por escribir una biblioteca genérica script para su uso en una serie de proyectos que pueden elegir cualquier elemento del menú a través de cualquier jerarquía de submenús.

La versión TL;DR de esta pregunta es: ¿Cómo lo hago?

0voto

Ununique Puntos 41

Después de luchar con esto durante días antes de publicar la pregunta anterior, parece que he descubierto una solución - Creo que el acto de describir realmente la pregunta en detalle para publicarla hizo que mi pensamiento llegara hasta allí.

Lo comparto para el beneficio de cualquier otra persona que se encuentre con algo similar...

Mi lucha fue con la idea de que la naturaleza jerárquica significaba aumentar el nivel de tell para cada elemento de theSubMenusNamesList . No he podido averiguar cómo poner eso en un bucle sin que cada iteración del bucle entre en ese nivel pero luego tenga que volver a salir en el mismo nivel, con lo que no se profundiza.

Aquí fue donde la opción 3 fue un fracaso desde el principio, lo que me hizo bajar a la madriguera de intentar construir el script en texto, para luego ejecutarlo con run script .

Sin embargo, la opción 3 es en realidad la respuesta - codificarla directamente sin tratar de construirla en texto - pero tuve que luchar con eso un poco más para llegar allí.

Al final me di cuenta de que puedo poner el subMenú de cada iteración en una variable - establecida como menu item ... of la iteración anterior de sí mismo . Que profundiza con éxito en cada uno de los niveles de la jerarquía sin retirarse demasiado pronto.

Por supuesto, si eso no tiene sentido, aquí está el código, que puedes robar y adaptar, por supuesto, y que puede tener más sentido o no... ;)

on chooseMenuItem(theApp, theMenu, theSubMenusNamesList, theMenuItemName)
    set theAppName to the name of theApp
    activate theApp
    tell application "System Events" to tell process theAppName
        tell theMenu to click

        repeat with theMenuName in theSubMenusNamesList
            set theMenu to menu item theMenuName of menu 1 of theMenu
            tell theMenu to click
        end repeat

        set theMenuItem to menu item theMenuItemName of menu 1 of theMenu
        tell theMenuItem to click
    end tell
end chooseMenuItem

Esto funciona para mí - probado con un número de diferentes opciones. Por ejemplo: Como en la pregunta original, llámalo con algo como:

ChooseMenuItem("TextEdit", "Format", {"Font", "Ligatures"}, "Use Default")

O un ejemplo sin submenús, dejando el tercer parámetro como una lista vacía:

ChooseMenuItem("TextEdit", "File", {}, "New")

Espero que esto ayude a alguien.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X