4 votos

Automatización de las preferencias del sistema Applescript

Estoy trabajando en la automatización de la configuración de las preferencias del sistema, pero tengo un problema. Este código debería seleccionar la pestaña Wi-Fi pero el área de desplazamiento 1 no existe a menos que haga clic en cualquier elemento que pertenezca al área de desplazamiento manualmente. He intentado emular el clic con muchos programas externos pero ni siquiera así puedo acceder al área de desplazamiento

tell application "System Preferences"
    activate
    reveal pane id "com.apple.preference.dock"
end tell
tell application "System Events" to tell application process "System Preferences"
    delay 1

    tell scroll area 1 of window 1
        select row 3 of outline 1
    end tell
end tell

¿Hay alguna otra forma de cambiar la configuración del Dock y de la barra de menús o sólo de acceder a los elementos del área de desplazamiento?

Edición: El objetivo final es ocultar el icono de Wi-Fi de la barra de menú.

2voto

user3439894 Puntos 5883

El objetivo final es ocultar el icono de Wi-Fi de la barra de menú.

Guiones de interfaz de usuario de Preferencias del sistema en MacOS Big Sur se ha convertido en una pesadilla, ya que muchos de los métodos que solían funcionar en versiones anteriores de MacOS simplemente ya no lo hacen en MacOS Big Sur . Muchos Elementos de la interfaz de usuario informe El padre no informa del elemento como uno de sus hijos cuando se utiliza Inspector de accesibilidad de Xcode que luego hacen imposible la comunicación con ellos. O algunos código puede funcionar una vez y la siguiente no. He escrito algunos código que se abrió a Wi-Fi y pulsó el botón Mostrar en la barra de menús casilla de verificación . Funcionó un par de veces y ahora no.

El original código Escribí que esporádicamente trabajaba no voy a publicar, sin embargo, lo siguiente ejemplo AppleScript código funciona sistemáticamente como se ha probado en MacOS Big Sur 11.4, aunque es lo que considero kludgy Guiones de interfaz de usuario como es visible en la pantalla, es propenso a fallar debido a problemas de sincronización, o si el jerárquico Elemento de la interfaz de usuario estructuras cambio debido a MacOS actualizaciones/mejoras.

El ejemplo AppleScript código que se muestra a continuación, se probó en Script Editor en MacOS Big Sur 11.4 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.

Este script requiere que el Utilice la navegación por teclado para mover el foco entre los controles casilla de verificación se comprueba en el Preferencias del sistema > Teclado > Atajos y, tal como está codificado, el script comprueba su estado y activa el casilla de verificación Según sea necesario, en función de su estado actual.

Este script también comprueba primero si el Wi-Fi se muestra en el icono Barra de menús y si no es así, detener la ejecución del script, ya que su propósito es actuar sólo si se muestra en el Barra de menús .


Ejemplo AppleScript código :

--  # 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) & ¬
    "com.apple.controlcenter.plist"

-- Get the value of 'NSStatusItem Visible WiFi' to determine if the
-- Wi-Fi icon is showing on the Menu Bar, and if it's not, then halt
-- execution of the script, as its purpose is to act only if it is.

tell application "System Events" to ¬
    tell the property list file thePropertyListFilePath to ¬
        set |Wi-Fi Menu Bar Icon Status| to the value of ¬
            the property list item ¬
                "NSStatusItem Visible WiFi"

if |Wi-Fi Menu Bar Icon Status| is false then return

--  # 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 Dock & Menu Bar pane.
--  # 
--  # This UI Script needs it to be visible, hence the activate command.

tell application "System Preferences"
    activate
    reveal pane id "com.apple.preference.dock"
end tell

tell application "System Events"
    set i to 0
    repeat until exists window "Dock & Menu Bar" of ¬
        application process "System Preferences"
        delay 0.1
        set i to i + 1
        if i ≥ 30 then return
    end repeat
end tell

--  # Tab to the 'Show in Menu Bar' checkbox and uncheck it.

tell application "System Events"
    key code 48 -- # tab key
    delay 0.2
    key code 125 -- # down arrow key
    delay 0.2
    key code 48 -- # tab key
    delay 0.2
    key code 49 -- # spacebar
    delay 0.1
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(s) #

--  # 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

Notas:

Si el estado normal del Utilice la navegación por teclado para mover el foco entre los controles casilla de verificación no está marcada, entonces no ejecute el script inmediatamente de forma consecutiva, ya que se necesitan uno o dos segundos para que el valor de la property list item "AppleKeyboardUIMode" en el usuarios archivo de preferencias globales para actualizar el cambio. Menciono esto principalmente para cuando se hace la prueba más que cuando en el uso de producción normal, ya que no debería ser un problema entonces.


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