2 votos

Applescript para el panel de preferencias del sistema del teclado

Estoy tratando de escribir un applescript que me lleve a una sección específica de las preferencias del sistema - Teclado > Accesos directos > Accesos directos a aplicaciones y haga clic en el "+", elija una aplicación específica, introduzca el título del menú e introduzca la "tecla F" en sus respectivos campos. Esto es lo que tengo hasta ahora:

tell application "System Preferences"
    activate
    set current pane to pane id "com.apple.preference.keyboard"
    delay 1
    tell application "System Events"
        click radio button "Shortcuts" of tab group 1 of window "Keyboard" of application process "System Preferences"
        delay 1
        select row 8 of table 1 of scroll area 1 of splitter group 1 of tab group 1 of window 1 of application process "System Preferences"
        click radio button "+" of tab group 1 of window "Keyboard" of application process "System Preferences"
    end tell
end tell

Esto me lleva a la parte de accesos directos de aplicaciones del panel de preferencias del teclado, pero no puedo hacer clic en el botón "+" para ir más allá. ¿Hay alguna forma de hacer clic en "+", elegir una aplicación, rellenar los campos Título del menú y Atajo de teclado?

Gracias por cualquier ayuda.

1voto

user3439894 Puntos 5883

No necesitará su AppleScript código ya que esto proporciona una solución completa y adecuada para el Guiones de interfaz de usuario de Preferencias del sistema para el caso de uso que desea lograr.

El ejemplo AppleScript código que se muestra a continuación, se probó en script Editor en MacOS Catalina y MacOS Big Sur con Lengua y región ajustes en Preferencias del sistema ajustado a Inglés (EE.UU.) - Primaria y me ha funcionado sin problemas 1 .

  • 1 Asume la configuración necesaria y adecuada en <strong>Preferencias del sistema </strong>> <strong>Seguridad y privacidad </strong>> <strong>Privacidad </strong>se han fijado/abordado según las necesidades.

Tenga en cuenta que como esto es usar Guiones de interfaz de usuario es necesario dejar que se ejecute sin hacer nada más hasta que el script acabados.

El ejemplo AppleScript código está comentada y sólo debería tener que establecer el valor del título del elemento de menú, el nombre de la aplicación y el atajo de teclado basándose en el código ejemplo utilizando Fotos .

Ejemplo AppleScript código :

--  # Set the value for appName and menuItemTitle, as in the example below.

set appName to "Photos"
set menuItemTitle to "Keep Sorted By Title"

--  # Set the keyboard shortcut in the setKeyboardShortcut() handler.

to setKeyboardShortcut()
    tell application "System Events" to ¬
        keystroke "t" using {option down, command down}
end setKeyboardShortcut

--  ######################################################
--  # The code below should only be edited as necessary. #
--  ######################################################

--  # Check to see if System Preferences is 
--  # running and if yes, then close it.
--  # 
--  # This is done so the script will not fail 
--  # if it is running and a modal sheet is 
--  # showing, hence the use of 'killall' 
--  # as 'quit' fails when done so, if it is.
--  #
--  # This is also done to allow default behaviors
--  # to be predictable from a clean occurrence.

if running of application "System Preferences" then
    try
        tell application "System Preferences" to quit
    on error
        do shell script "killall 'System Preferences'"
    end try
    delay 0.1
end if

--  # Make sure System Preferences is not running before
--  # opening it again. Otherwise there can be an issue
--  # when trying to reopen it while it's actually closing.

repeat while running of application "System Preferences" is true
    delay 0.1
end repeat

--  # Get the fully qualified POSIX pathname of the target .plist file.

set thePropertyListFilePath to ¬
    the POSIX path of ¬
        (path to preferences from user domain as string) & ¬
    ".GlobalPreferences.plist"

--  # Get the value of AppleKeyboardUIMode to determine if the
--  # 'Use keyboard navigation to move focus between controls'
--  # checkbox is checked on the System Preferences >  
--  # Keyboard > Shortcuts tab.

tell application "System Events" to ¬
    tell the property list file thePropertyListFilePath to ¬
        set keyboardNavigation to the value of ¬
            the property list item "AppleKeyboardUIMode"

if keyboardNavigation = 0 then
    --  # Check the checkbox.
    my toggleKeyboardNavagition()
end if

--  # Open System Preferences to the 
--  # Shortcuts tab of the Keyboard pane.

tell application "System Preferences"
    activate
    reveal anchor "shortcutsTab" of ¬
        pane id "com.apple.preference.keyboard"
end tell

tell application "System Events"
    tell window 1 of ¬
        application process "System Preferences"

        --  # Wait until necessary UI element is available.

        set i to 0
        repeat until exists ¬
            checkbox 1 of ¬
            tab group 1
            delay 0.1
            set i to i + 1
            if i ≥ 30 then return
        end repeat

        --  # Select App Shortcuts.
        --  # This is wrapped in a try 
        --  # statement as a workaround.

        try
            select (rows of ¬
                table 1 of ¬
                scroll area 1 of ¬
                splitter group 1 of ¬
                tab group 1 whose ¬
                value of ¬
                static text 1 is ¬
                "App Shortcuts")
        end try

        --  # Wait until necessary UI element is available.

        set i to 0
        repeat until exists ¬
            button 1 of ¬
            group 1 of ¬
            tab group 1
            delay 0.1
            set i to i + 1
            if i ≥ 30 then return
        end repeat

        --  # Click the [+] button.

        click button 1 of ¬
            group 1 of ¬
            tab group 1

        --  # Wait until necessary UI element is available.

        set i to 0
        repeat until exists ¬
            text field 2 of sheet 1
            set i to i + 1
            if i ≥ 30 then return
        end repeat

        --  # Fill in the Sheet with the menu item title,
        --  # application name, and keyboard shortcut.

        set value of text field 2 of sheet 1 to menuItemTitle
        delay 0.2
        click pop up button 1 of sheet 1
        delay 0.2
        click menu item appName of menu 1 of pop up button 1 of sheet 1
        delay 0.2
        key code 48 --  # Tab key
        delay 0.2
        my setKeyboardShortcut()
        delay 0.2
        click button "Add" of sheet 1

    end tell
end tell

if keyboardNavigation = 0 then
    --  # Uncheck the checkbox if it
    --  # was previously unchecked.
    my toggleKeyboardNavagition()
end if

delay 0.2

tell application "System Preferences" to quit

--  # Handler #

--  # Toggles checkbox: 'Use keyboard navigation 
--  # to move focus between controls'

on toggleKeyboardNavagition()
    tell application "System Preferences"
        activate
        reveal anchor "shortcutsTab" of ¬
            pane id "com.apple.preference.keyboard"
    end tell
    tell application "System Events"
        tell front window of ¬
            application process "System Preferences"
            set i to 0
            repeat until (exists checkbox 1 of tab group 1)
                delay 0.1
                set i to i + 1
                if i ≥ 30 then return
            end repeat
            click checkbox 1 of tab group 1
        end tell
    end tell
end toggleKeyboardNavagition

Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>según corresponda. Corresponde al usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>pruebe con </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>. Además, el uso de la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retraso </strong></a><em>comando </em>puede ser necesario entre eventos cuando sea apropiado, por ejemplo <code>delay 0.5</code> con el <em>valor </em>de la <em>retraso </em>ajustado apropiadamente.

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