1 votos

Acceso directo para alternar KeyboardViewer con AppleScript en Big Sur

Estoy intentando crear un acceso directo que active el Visor de Teclado con Automator. He probado las dos formas: este viejo y y este otro para Sierra
Para ambas formas, hay un error de sintaxis "No se puede obtener la aplicación KeyboardViewer"
Si pulso el acceso directo que he asignado, se abre una ventana ("Elegir una aplicación") con una lista de aplicaciones

Los scripts que he probado:

if application "KeyboardViewer" is running then
    quit application "KeyboardViewer"
end if

activate application "KeyboardViewer"

-- wait until the window has been closed, then end the KeyboardViewer process
set numberOfWindows to 1
repeat until numberOfWindows = 0
    delay 5
    tell application "System Events"
        tell process "KeyboardViewer"
            set numberOfWindows to count windows
        end tell
    end tell
end repeat
quit application "KeyboardViewer"

y

on run
    tell application "System Events"
        set activeApp to name of first application process whose frontmost is true and visible is true
    end tell
    if application "KeyboardViewer" is running then
        quit application "KeyboardViewer"
    else
        activate application "KeyboardViewer"
    end if
    tell application activeApp to activate
end run

0voto

wch1zpink Puntos 11

Esto me funciona en MacOS Big Sur.

if application "System Preferences" is running then do shell script "killall 'System Preferences'"
repeat until application "System Preferences" is not running
    delay 0.1
end repeat

tell application "System Preferences"
    reveal anchor "Virtual_Keyboard" of pane "com.apple.preference.universalaccess"
end tell

tell application "System Events" to tell application process "System Preferences"
    repeat until checkbox "Enable Accessibility Keyboard" of tab group 1 ¬
        of group 1 of window "Accessibility" exists
        delay 0.1
    end repeat
    set theValue to value of checkbox "Enable Accessibility Keyboard" of tab group ¬
        1 of group 1 of window "Accessibility"
    delay 0.1
    if theValue = 1 then
        set frontmost to true
        repeat until frontmost
            delay 0.1
        end repeat
        click checkbox "Enable Accessibility Keyboard" of tab group 1 of ¬
            group 1 of window "Accessibility"
        delay 0.1
        if UI element "OK" of sheet 1 of window "Accessibility" exists then
            click UI element "OK" of sheet 1 of window "Accessibility"
        end if
    else
        click checkbox "Enable Accessibility Keyboard" of tab group 1 of ¬
            group 1 of window "Accessibility"
    end if
end tell

do shell script "killall 'System Preferences'"

SIDENOTE: Mi razón para usar el comando do shell script "killall 'System Preferences'" en lugar de decirle a la aplicación "System Preferences" que salga es... Digamos que, por la razón que sea, la aplicación Preferencias del Sistema.app ya está activada (con, por ejemplo, la ventana Compartir/Gestión remota/Configuración del equipo abierta) pero no es visible o no está al frente de la mayoría o lo que sea. En el Editor de script, intenta ejecutar la aplicación "Preferencias del Sistema" para revelar el ancla "SpeakableItems" del panel id "com.apple.preference.universalaccess" Ese comando se completa sin errores obvios pero cuando cambia a Preferencias del Sistema, su "ancla revelada" no se revela. Ok, no es gran cosa, es fácil de arreglar. Simplemente insertaré un comando "Preferencias del Sistema" para salir de la aplicación antes del comando "revelar ancla". Ejecutando el código actualizado esta vez, se obtiene un error (userCanceledErr:-128). Toda esta molestia se debe a que esa ventana desplegable secundaria de Preferencias del Sistema está abierta. En mi opinión, el comando do shell script "killall 'System Preferences'" parece ser la mejor solución.


Aquí hay otra opción si tiene marcada la opción "Mostrar el estado de accesibilidad en la barra de menús" en Preferencias del Sistema/Accesibilidad. Es corto, es dulce, pero utiliza secuencias de comandos de interfaz de usuario.

tell application "System Events"
    click menu bar item "Accessibility Shortcuts" of menu bar 1 ¬
        of application process "ControlCenter"
    repeat until checkbox "Accessibility Keyboard" of group 1 of ¬
        window "Control Center" of application process "ControlCenter" exists
        delay 0.1
    end repeat
    click checkbox "Accessibility Keyboard" of group 1 of ¬
        window "Control Center" of application process "ControlCenter"
    delay 0.1
    key code 53 -- escape key
end tell

0voto

user3439894 Puntos 5883

El ejemplo AppleScript código que se muestra más abajo, cambiará el estado del Teclado de accesibilidad y fue probado bajo MacOS Catalina y MacOS Big Sur .

Me ha funcionado tal y como está codificado, sin embargo, utiliza un utilidad de terceros para evitar el cierre de la Teclado de accesibilidad mediante la desactivación de la opción Activar el teclado de accesibilidad casilla de verificación en Preferencias del sistema para no tener que ver el Guiones de interfaz de usuario de Preferencias del sistema apertura y la OK al hacer clic en el botón, seguido de Preferencias del sistema cierre, como ocurre con el código en la otra respuesta a su pregunta.

Tener que usar Guiones de interfaz de usuario ya es bastante malo, pero tener la distracción visual de tener que ver Preferencias del sistema abierto y el OK al hacer clic en el botón, seguido de Preferencias del sistema El cierre no es necesario con mi método.

El utilidad de terceros es Haga clic en y la coloqué en /usr/local/bin/ y se utiliza para pulsar el Cerrar en el botón UI de la Teclado de accesibilidad . (Intenté cerrarlo con otros métodos adicionales, pero éste fue el menos problemático, y por eso necesité hacerlo).

Para utilizar el ejemplo AppleScript código Lo guardé como Teclado de Accesibilidad Toggle.scpt en ~/Library/scripts/ y activarlo con un atajo de teclado de ⌃⌥⌘K utilizando FastScripts Sin embargo, un Automatizador Servicio/Acción Rápida puede crearse utilizando un Ejecutar AppleScript acción y el código junto con un atajo de teclado asignado: Preferencias del sistema > Teclado > Atajos > Servicios

Lo que el ejemplo AppleScript código lo hace:

  • Comprueba si el Teclado de accesibilidad está mostrando al leer com.apple.HIToolbox archivo plist para ver si com.apple.inputmethod.AssistiveControl existe, ya que lo hace cuando se muestra, y no cuando no se muestra.

  • Si se muestra, llama al closeVirtualKeyboard manipulador que obtiene mediante programación la posición y el tamaño del Cerrar de la Teclado de accesibilidad para hacer clic en él, utilizando cliclick donde sea que esté en la pantalla.

  • Si no aparece, llama al openVirtualKeyboard manipulador para mostrarlo.

Ejemplo AppleScript código :

set shellCMD to {¬
    "defaults read com.apple.HIToolbox", ¬
    " | ", ¬
    "grep -o 'com.apple.inputmethod.AssistiveControl'", ¬
    "; exit 0"} as string

set foo to (do shell script shellCMD)

if not foo is equal to "" then
    closeVirtualKeyboard()
else
    my openVirtualKeyboard()
end if

on closeVirtualKeyboard()
    tell application "System Events"
        set ps to {position, size} of ¬
            button "Close" of window "Panel" of ¬
            application process "Assistive Control"
        set x to (item 1 of item 1 of ps) + ¬
            (item 1 of item 2 of ps) / 2 as integer
        set y to (item 2 of item 1 of ps) + ¬
            (item 2 of item 2 of ps) / 2 as integer
        set shellCMD to ¬
            {"/usr/local/bin/cliclick -r c:", x, ",", y} ¬
                as string
        tell me to do shell script shellCMD
    end tell
end closeVirtualKeyboard

on openVirtualKeyboard()
    if running of application "System Preferences" then
        try
            tell application "System Preferences" to quit
        on error
            do shell script "killall 'System Preferences'"
        end try
    end if
    delay 0.1
    repeat while running of application "System Preferences" is true
        delay 0.1
    end repeat
    tell application "System Preferences" to ¬
        reveal anchor "Virtual_Keyboard" in ¬
            pane id "com.apple.preference.universalaccess"
    tell application "System Events"
        repeat until (exists checkbox "Enable Accessibility Keyboard" of ¬
            tab group 1 of group 1 of window "Accessibility" of ¬
            application process "System Preferences")
            delay 0.01
        end repeat
        click checkbox "Enable Accessibility Keyboard" of ¬
            tab group 1 of group 1 of window "Accessibility" of ¬
            application process "System Preferences"
    end tell
    tell application "System Preferences" to quit
end openVirtualKeyboard

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