AppleScript para activar el teclado de accesibilidad en High Sierra

¿Cómo puedo escribir un script para activar el teclado de accesibilidad presente en macOS High Sierra?

Por supuesto, es posible hacer esto yendo a Preferencias del sistema> Accesibilidad> Teclado> Teclado de accesibilidad> "Habilitar teclado de accesibilidad", pero esto requiere varios clics. Me gustaría una secuencia de comandos que se pueda iniciar desde el Dock, ya que uso con frecuencia el teclado de accesibilidad.

Una idea es usar AppleScript; otra idea es encontrar el binario del teclado de accesibilidad y usar un script de shell para abrirlo.

Aquí está mi intento de un AppleScript:

tell application "System Preferences"
    activate
    reveal (pane id "com.apple.preference.universalaccess")
end tell

tell application "System Events" to tell application process "System Preferences"
    tell window "Accessibility"
        click UI element "Keyboard" of row 16 of table 1 of scroll area 2
        click button "Accessibility Keyboard"
        click checkbox "Enable Accessibility Keyboard"
    end tell
end tell

Este script falla con el error: "Los eventos del sistema obtuvieron un error: no se puede obtener el botón 'Teclado de accesibilidad' de la ventana 'Accesibilidad' del proceso de aplicación 'Preferencias del sistema'".

Si elimino los dos últimos clickcomandos, la secuencia de comandos no produce un error, pero tampoco parece hacer clic en el elemento de interfaz de usuario "Teclado".

¿Qué estoy haciendo mal? Disculpas si esta es una pregunta estúpida; este es mi primer AppleScript.

O si alguien conoce la ubicación del binario del teclado de accesibilidad, también sería útil.

Respuestas (3)

Nota de actualización: esta respuesta se escribió originalmente antes del lanzamiento de macOS Mojave y, como tal, para usarla en macOS Mojave , deberá cambiar tres líneas de código .

Cambiar:

  • select table 1 of scroll area 2
  • select row 16 of table 1 of scroll area 2
  • tell tab group 1

A:

  • select table 1 of scroll area 1
  • select row 16 of table 1 of scroll area 1
  • tell tab group 1 of group 1

El siguiente código AppleScript de ejemplo me funciona en macOS High Sierra :

if running of application "System Preferences" then
    quit application "System Preferences"
    delay 1
end if
tell application "System Preferences"
    reveal pane id "com.apple.preference.universalaccess"
    delay 1
    tell application "System Events"
        tell window 1 of application process "System Preferences"
            select table 1 of scroll area 2
            delay 0.1
            select row 16 of table 1 of scroll area 2
            delay 0.1
            tell tab group 1
                click radio button "Accessibility Keyboard"
                delay 0.1
                click checkbox "Enable Accessibility Keyboard"
            end tell
        end tell
    end tell
    quit
end tell

En Script Editor , guardé el código AppleScript de ejemplo como una aplicación , denominada Accessibility Keyboard.app , en la carpeta Aplicaciones .

A continuación, agregué Accessibility Keyboard.app a: Preferencias del sistema > Seguridad y privacidad > Privacidad > Accesibilidad

Ahora puedo abrir el Teclado de accesibilidad fácilmente a través de Spotlight , o la aplicación Teclado de accesibilidad se puede arrastrar y soltar en el Dock para que se inicie allí.


Actualizar:

Mi ejemplo original de código AppleScript estaba orientado a abrir el Teclado de Accesibilidad , no a cerrarlo. Como tal, si está abierto y el script original se ejecuta nuevamente, se produce un error. La siguiente versión del código AppleScript de ejemplo explica si el teclado de accesibilidad ya se muestra o no y, de ser así, lo cierra.

Tenga en cuenta que, si bien esto cierra el teclado de accesibilidad si se muestra, hay un rebote adicional en el mosaico de la base de las preferencias del sistema y no es más que una distracción visual secundaria.

Ejemplo de código AppleScript :

if running of application "System Preferences" then
    quit application "System Preferences"
    delay 1
end if
tell application "System Preferences"
    reveal pane id "com.apple.preference.universalaccess"
    delay 1
    tell application "System Events"
        tell window 1 of application process "System Preferences"
            select table 1 of scroll area 2
            delay 0.1
            select row 16 of table 1 of scroll area 2
            delay 0.1
            tell tab group 1
                click radio button "Accessibility Keyboard"
                delay 0.1
                if value of checkbox "Enable Accessibility Keyboard" is 0 then
                    click checkbox "Enable Accessibility Keyboard"
                else
                    click checkbox "Enable Accessibility Keyboard"
                    delay 1
                    my clickOK()
                end if
            end tell
        end tell
    end tell
    quit
end tell

on clickOK()
    tell application "System Events" to click button "OK" of window 1 of application process "System Preferences"
end clickOK

Tenga en cuenta que no es necesario que las Preferencias del sistema estén visibles para que esto funcione y por qué no hay ningún activate comando en el código AppleScript de ejemplo . Además, si las Preferencias del sistema ya están abiertas, primero se cierran antes de que se procese el resto del código . Esto se hace por un par de razones, la primera de las cuales ya se indicó y, en segundo lugar, ver los eventos de la interfaz de usuario procesados ​​es una distracción visual y puede ser molesto.

También tenga en cuenta que es posible que sea necesario ajustar el valor de los delay comandos para su sistema y que es posible que se necesiten o no delay comandos adicionales. Ajuste los valores de y o agregue/elimine los delay comandos según corresponda.

Tenga en cuenta que una vez que la aplicación se agrega a Preferencias del sistema > Seguridad y privacidad > Privacidad > Accesibilidad y se modifica a partir de entonces, deberá desmarcarla y volver a marcarla para permitir que se procesen los nuevos cambios.


Nota: El código AppleScript de ejemplo es solo eso y no emplea ningún manejo de errores y solo pretende mostrar una de las muchas formas de realizar una tarea. La responsabilidad siempre recae sobre el Usuario para agregar/usar el manejo de errores apropiado según sea necesario/deseable.

¡Muchas gracias! ¡Esto funciona muy bien! Para que entienda mejor en el futuro, ¿fue mi error usar clicken lugar de selecty no usar delays? ¿En qué se diferencian clicky en qué selectse diferencian?
@Henry DeYoung, para responder a su pregunta en el comentario... En términos generales, pero no siempre, con UI Scripting para hacer clic en algo, primero debe estar enfocado. Cuando Preferencias del sistema se abre por primera vez en Accesibilidad, generalmente el cuadro de texto Buscar tiene el foco. Entonces, intentar hacer clic en algo en la tabla en el área de desplazamiento que no está enfocado falla y por qué obtuviste el error que obtuviste. Entonces, al seleccionar primero la tabla en el área de desplazamiento, luego se puede seleccionar el Teclado (seleccione la fila 16 de la tabla 1 del área de desplazamiento 2). Continúa en el siguiente comentario...
@Henry DeYoung, ahora se puede hacer clic en el botón Teclado de accesibilidad y se puede marcar Habilitar teclado de accesibilidad. Por lo tanto, selectestablece el foco en un objeto mientras clickacciona el objeto. La conclusión es que las diferencias, según corresponda o sea necesario en cualquier escenario de caso de uso particular, se vuelven más evidentes con la experiencia en el uso de AppleScript UI Scripting.
@Henry DeYoung, en cuanto al uso del delay comando , esto es necesario en algunos casos de uso y no en otros, obviamente, si algo falla y es un problema de tiempo, entonces es necesario un retraso. A menudo, con UI Scripting, los retrasos son necesarios, pero no siempre.
¡Muchas gracias de nuevo por tu ayuda! Su descripción de enfoque y selectvs. clicktiene sentido. Para no tener que depender siempre de la generosidad de personas como usted, ¿existe algún tutorial/documentación bueno para las secuencias de comandos de la interfaz de usuario de AppleScript que me recomiende?
@Henry DeYoung, lo siento, realmente no tengo una recomendación específica para un buen tutorial/documentación para las secuencias de comandos de la interfaz de usuario de AppleScript. Para ser honesto, generalmente puedo encontrar lo que necesito buscando en Google.
@Richard, debe cambiar las siguientes tres líneas select table 1 of scroll area 2, select row 16 of table 1 of scroll area 2, tell tab group 1a lo siguiente: select table 1 of scroll area 1, select row 16 of table 1 of scroll area 1,tell tab group 1 of group 1

Basado en su excelente trabajo anterior, aquí hay un

Versión actualizada de 2018

Características

  • Funciona sin retrasos arbitrarios.
  • Funciona como un conmutador (se muestra/oculta según el estado del teclado)
  • Conserva el estado de la aplicación Preferencias del Sistema
  • utiliza manzanasEnhanced Application Object Model

Código fuente

(*
 * toggle-macos-accessibility-keyboard
 * applescript
 *
 * description:
 * macOS automation script to toggle the macOS Accessibility Keyboard.
 * Shows and hides the keyboard depending on its current state.
 *
 * author: sidneys
 * homepage: http://sidneys.github.io
 * version: 2.0.1
 * license: MIT
 *)

-- Init
use AppleScript version "2.7"
use scripting additions

-- Persist start-up state of the "System Preferences" app
set didRunSystemPreferences to (get running of application "System Preferences")

-- Initialize storage for the checkbox value
set initialCheckboxValue to -1
set currentCheckboxValue to -1

-- Show "Keyboard" pane within the Accessibility preferences
tell application "System Preferences"
    reveal anchor 2 of pane id "com.apple.preference.universalaccess"
end tell

-- Start automated interaction
tell application "System Events"

    -- Wait for: System Preferences Window
    repeat until tab group 1 of window 1 of process "System Preferences" exists
    end repeat

    -- Wait for: Settings Pane
    repeat until (name of second radio button of tab group 1 of window 1 of process "System Preferences") is "Accessibility Keyboard"
    end repeat

    -- Select the "Accessibility Keyboard" Segmented Control
    click radio button 2 of tab group 1 of window 1 of process "System Preferences"

    -- Tick the "Enable Accessibility Keyboard" checkbox, remembering its before/after value
    set initialCheckboxValue to value of checkbox 1 of tab group 1 of window 1 of process "System Preferences"
    click checkbox 1 of tab group 1 of window 1 of process "System Preferences"
    set currentCheckboxValue to value of checkbox 1 of tab group 1 of window 1 of process "System Preferences"

    -- Did the checkbox value change?
    if initialCheckboxValue is currentCheckboxValue then
        -- No - Wait for: confirmation dialog
        repeat until sheet 1 of window 1 of process "System Preferences" exists
        end repeat
        -- Dismiss dialog
        click button 1 of sheet 1 of window 1 of process "System Preferences"
    end if

end tell

-- Did the "System Preferences" app run on start-up?
if not didRunSystemPreferences then
    -- No - Quit
    quit application "System Preferences"
else
    -- Yes - Return to the overview screen
    tell application "System Events"
        click menu item 3 of menu 1 of menu bar item 4 of menu bar 1 of process "System Preferences"
    end tell
end if

Repositorio

Fork the Gist en GitHub: alternar-accesibilidad-teclado-macos

Espero sus comentarios, Saludos, S

¡Esto es increíble, gracias! ¿Sabe si hay alguna forma de que su secuencia de comandos recuerde que el teclado no se esconde en las esquinas activas? Me gusta la función de esquina activa, pero a menudo vuelvo a mi escritorio y activo el script solo para darme cuenta de que el teclado se había ocultado previamente debido a un evento de esquina activa. Sería bueno si su secuencia de comandos mostrara el teclado oculto en lugar de cerrarlo. En cualquier caso, ¡muchas gracias por tu ayuda!

Otra solución sencilla:

tell application "System Events"
    key code 96 using {option down, command down} -- shift-command-F5
end tell
Debe agregar un código de clic del mouse en una ubicación de píxel adecuada y también para el botón "Listo". bonificación si se puede acceder a la casilla de verificación del teclado a través de AppleScript en la superposición.