El ejemplo AppleScript código que se muestra más adelante, se probó bajo MacOS Catalina con Lengua y región ajustes en Preferencias del sistema ajustado a Inglés / Inglés (EE.UU.) - Primaria y Fuentes de entrada en Preferencias del sistema > Teclado ajustado a ESTADOS UNIDOS. . Se probó en Script Editor como script y probado guardado como un aplicación y se añade a Elementos de inicio de sesión en Preferencias del sistema > Usuarios y grupos para el objetivo Usuario .
Para probarlo como un aplicación Lo he guardado como Desmarcar las fuentes de entrada añadirlo a Preferencias del sistema > Seguridad y privacidad > Privacidad > Accesibilidad . Después de lo cual la primera vez que lo ejecuté manualmente, para ver que funcionaba, me preguntó...
-
"Desactivar fuentes de entrada" quiere acceder al control de "Eventos del sistema". Permitir el control dará acceso a los documentos y datos de "Eventos del sistema" y a realizar acciones dentro de esa app. Este script necesita controlar otras aplicaciones para ejecutarse.
No permita que se le dé el visto bueno
A lo que hice clic: OK
Luego lo probé, reiniciando el sistema un par de veces y parecía funcionar sin problemas.
NOTA : Esto utiliza Guiones de interfaz de usuario y Eventos del sistema para alternar el objetivo casillas de verificación en Preferencias del sistema > Teclado > Atajos > Fuentes de entrada y lo hace sin mostrar el UI de Preferencias del sistema Sin embargo, todavía tiene que abrirlo y hacer lo suyo. Tenga esto en cuenta cuando inicie la sesión, y deje que el proceso se complete antes de hacer cualquier otra cosa. Sólo debería tardar unos segundos. (Así es la naturaleza de Guiones de interfaz de usuario .)
Ejemplo AppleScript código :
-- # 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 is actually closing.
set i to 0
repeat while (running of ¬
application "System Preferences") is true ¬
or (i is equal to 20)
delay 0.1
set i to i + 1
end repeat
if i is equal to 20 then return
-- # Open System Preferences to the
-- # Shortcuts tab of the Keyboard pane.
tell application "System Preferences" to ¬
reveal anchor "shortcutsTab" of ¬
pane id "com.apple.preference.keyboard"
-- # System Events does the navigating around the
-- # Shortcuts tab of the Keyboard pane and toggles
-- # the state of the target keyboard shortcut
-- # checkbox so it is left unchecked.
tell application "System Events"
-- # Make sure the UI is ready to be navigated.
-- # Checks for the 'Use keyboard navigation
-- # to move focus between controls' checkbox.
set i to 0
repeat until (exists checkbox 1 of ¬
tab group 1 of ¬
window 1 of ¬
process "System Preferences") ¬
or (i is equal to 40)
delay 0.05
set i to i + 1
end repeat
if i is equal to 40 then return
-- # Make sure 'Input Sources' exists in the
-- # left hand pane, and if not exit the script.
if not (exists (every row of ¬
table 1 of ¬
scroll area 1 of ¬
splitter group 1 of ¬
tab group 1 of ¬
window 1 of ¬
process "System Preferences" whose ¬
value of static text 1 is "Input Sources")) ¬
then return
-- # Select 'Input Sources' in the left hand pane.
-- # This is wrapped in a try statement to get
-- # past a bug in how the select command is
-- # interpreted and is silently eaten.
try
select (every row of ¬
table 1 of ¬
scroll area 1 of ¬
splitter group 1 of ¬
tab group 1 of ¬
window 1 of ¬
process "System Preferences" whose ¬
value of static text 1 is "Input Sources")
end try
-- # make sure the target checkbox
-- # is available before proceeding
-- # Checks for the 'Select the
-- # previous input source' checkbox.
set i to 0
repeat until (exists checkbox 1 of ¬
UI element 1 of ¬
row 1 of ¬
outline 1 of ¬
scroll area 2 of ¬
splitter group 1 of ¬
tab group 1 of ¬
window 1 of ¬
process "System Preferences") ¬
or (i is equal to 40)
delay 0.05
set i to i + 1
end repeat
if i is equal to 40 then return
end tell
-- # Get the state of the target checkbox
-- # as a boolean and toggle the state
-- # of the target checkbox accordingly.
-- # The 'Select the previous input source'
-- # checkbox.
if my cbIsChecked(1) then
my clickCheckbox(1)
else
my clickCheckbox(1)
delay 0.2
my clickCheckbox(1)
end if
-- # Get the state of the target checkbox
-- # as a boolean and toggle the state
-- # of the target checkbox accordingly.
-- # The 'Select next source in input menu'
-- # checkbox.
if my cbIsChecked(2) then
my clickCheckbox(2)
else
my clickCheckbox(2)
delay 0.2
my clickCheckbox(2)
end if
delay 0.2
tell application "System Preferences" to quit
-- # Handler(s)
-- # Get the current state of the target checkbox.
-- # 'Select the previous input source' checkbox. (1)
-- # 'Select next source in input menu' checkbox. (2)
on cbIsChecked(rowNumber)
tell application "System Events" to ¬
return (value of ¬
checkbox 1 of ¬
UI element 1 of ¬
row rowNumber of ¬
outline 1 of ¬
scroll area 2 of ¬
splitter group 1 of ¬
tab group 1 of ¬
window 1 of ¬
process "System Preferences") ¬
as boolean
end cbIsChecked
-- # Clicks the target checkbox of the target row.
-- # Due to the requirements of the OP this is
-- # called two to four times as needed based
-- # on the current state of the target checkboxes.
-- # 'Select the previous input source' checkbox. (1)
-- # 'Select next source in input menu' checkbox. (2)
on clickCheckbox(rowNumber)
tell application "System Events" to ¬
click checkbox 1 of ¬
UI element 1 of ¬
row rowNumber of ¬
outline 1 of ¬
scroll area 2 of ¬
splitter group 1 of ¬
tab group 1 of ¬
window 1 of ¬
process "System Preferences"
end clickCheckbox
Debido a los comentarios y al estilo de codificación, el script es muy largo. Termina con end clickCheckbox
así que asegúrese de resaltarlo todo cuando copie y pegue en Script Editor para probarlo antes de guardarlo como aplicación con fines de producción.
Notas :
-
Tal y como está codificado, el repeat
bucles se fijan para que se agote el tiempo de espera después de dos segundos si la condición principal no se cumple primero. Si se alcanza el tiempo de espera, el script se detiene sin ningún mensaje de error. Esto se puede modificar según se necesite/se quiera/se requiera.
-
Si no quiere que el icono de los guardados AppleScript aplicación que se muestra en el Muelle , entonces en Terminal utilice lo siguiente sintaxis del comando mientras se cambia /path/to/$name.app
en el ejemplo comando '/path/to/$name.app/Contents/Info.plist'
a la ruta de acceso de los salvados AppleScript aplicación :
defaults write '/path/to/$name.app/Contents/Info.plist' LSUIElement -bool yes
-
Para mis pruebas he utilizado:
defaults write '/Applications/Uncheck Input Sources.app/Contents/Info.plist' LSUIElement -bool yes
-
Si se modifica la información guardada AppleScript paquete de aplicaciones después de que se haya autorizado su ejecución, entonces tendrá que volver a autorizarlo antes de que el sistema se reinicie de nuevo. Vaya a Preferencias del sistema > Seguridad y privacidad > Privacidad > Accesibilidad y desmarcar el casilla de verificación para el objetivo aplicación y volver a comprobarlo. A continuación, ejecute el AppleScript aplicación manualmente para responder OK a la cuadro de diálogo que aparecen. Los guardados Safari aplicación se lee ahora para su uso en producción y no icono para que aparezca en el Muelle .
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>intente </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 del <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.