2 votes

Applescript pour activer "Annoncer l'heure :" dans les préférences Sys

J'essaie d'activer la case à cocher " Annoncer l'heure : " dans le volet " Dock et barre de menu " des préférences système (dans Big Sur).

Je suis arrivé jusqu'ici :

tell application "System Preferences"
    activate
    reveal anchor "Clock" of pane id "com.apple.preference.dock" -- pane "Dock & Manu Bar"
    -- nothing I've tried here works
end tell
tell application "System Events"
    -- nothing I've tried here works
end tell

Cela révèle le bon volet avec cette case à cocher :

enter image description here

J'ai essayé d'utiliser les coordonnées globales avec click at {x,y} mais elle est ignorée ou je reçois une erreur de délai d'attente. (Je suis capable de cliquer sur les boutons de l'écran principal Sys Prefs, donc je sais que j'ai les coordonnées correctes). J'ai également essayé de cliquer sur l'élément nommé Announce the time: mais ça n'a pas marché non plus.

Comment puis-je faire basculer le Announce the time: boîte à cocher ?

3voto

Daniel Points 32917

Compte tenu du manque de convivialité script de l'incarnation actuelle de l'application Préférences Système, peut-être qu'une approche plus fructueuse serait d'utiliser cette réponse sur Ask Different pour modifier directement le réglage.

Ainsi, pour activer les annonces de temps, vous devez utiliser les deux éléments suivants :

do shell script "defaults write com.apple.speech.synthesis.general.prefs TimeAnnouncementPrefs -dict-add TimeAnnouncementsEnabled -bool YES "

do shell script "open /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesisServer.app"

Et pour désactiver les annonces, vous utiliserez simplement

do shell script "defaults write com.apple.speech.synthesis.general.prefs TimeAnnouncementPrefs -dict-add TimeAnnouncementsEnabled -bool NO "

2voto

user3439894 Points 52496

Utilisation de Inspecteur de l'accessibilité , une partie de Xcode cela montre que, dans certains cas, le Annoncez l'heure : case à cocher rapports " Le parent ne déclare pas l'élément comme l'un de ses enfants "et, en tant que telle, elle entraînera AppleScript code d'échouer dans certaines conditions, et dans d'autres conditions de ne pas échouer. En d'autres termes, en écrivant mon propre code, je peux faire en sorte qu'il vérifie que case à cocher parfois et pas d'autres fois.

En essayant d'établir un modèle pour voir comment contourner cette situation, je suis arrivé à la conclusion que l'utilisation d'une image entièrement visible Scripting de l'interface utilisateur était le moyen le plus fiable. C'est aussi, malheureusement, un moyen laid et qui nécessite de laisser l'option script se terminer sans interruption une fois lancé, sinon il échouera à coup sûr. Tels sont les pièges de la visibilité totale Scripting de l'interface utilisateur .

El exemple AppleScript code montré ci-dessous, a été testé dans scriptÉditeur sous MacOS Big Sur avec Langue et région paramètres dans Préférences du système réglé sur Anglais (US) - Primaire et a fonctionné pour moi sans problème 1 .

  • 1 Assume la mise en place nécessaire et appropriée dans <strong>Préférences du système </strong>> <strong>Sécurité et confidentialité </strong>> <strong>Vie privée </strong>ont été fixés/réglés selon les besoins.

Ce site script exige que le Utilisez la navigation au clavier pour déplacer le focus entre les contrôles case à cocher est vérifié sur le Préférences du système > Clavier > Raccourcis et, tel que codé, l'onglet script vérifie son statut et fait basculer le case à cocher si nécessaire, en fonction de son état actuel.


Exemple AppleScript code :

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

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

delay 1

--  # Tab to the 'Announce the time:' checkbox and toggle it.

tell application "System Events"
    repeat 9 times
        key code 48 --  # tab key
        delay 0.2
    end repeat
    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.5

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  20 then return
            end repeat
            click checkbox 1 of tab group 1
        end tell
    end tell
end toggleKeyboardNavagition
  • Notez qu'en raison des commentaires et du style de codage, l'option script est long. Il se termine par end toggleKeyboardNavagition assurez-vous donc de les mettre en surbrillance lorsque vous les copiez et les collez sur le site. scriptÉditeur pour les tests.

Notes :

Dans le tell application "System Events" bloc dans lequel il y a le repeat 9 times boucle qui fait le tabulation afin de faire basculer le Annoncez l'heure : case à cocher le valeur de la delay commande peut avoir besoin d'être ajusté.

Si l'état normal de la Utiliser la navigation au clavier pour déplacer le focus entre les contrôles case à cocher n'est pas cochée, alors n'exécutez pas la commande script immédiatement dos à dos car il faut une seconde ou deux pour que les valeur de la property list item "AppleKeyboardUIMode" dans le utilisateurs fichier de préférences globales pour mettre à jour la modification. Je mentionne ceci principalement pour les tests plutôt que pour une utilisation normale en production, car cela ne devrait pas être un problème dans ce cas.


Note : Le <em>exemple </em><strong>AppleScript </strong><em>code </em>est juste cela et sans aucune inclusion <em>gestion des erreurs </em>ne contient pas d'autres <em>traitement des erreurs </em>comme il se doit. C'est à l'utilisateur qu'il incombe d'ajouter toute <em>gestion des erreurs </em>selon ce qui est approprié, nécessaire ou souhaité. Consultez le <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>essayez </strong></a><em>déclaration </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>erreur </strong></a><em>déclaration </em>dans le <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guide du langage AppleScript </strong></a>. Voir aussi, <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>Travailler avec des erreurs </strong></a>. En outre, l'utilisation 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>retarder </strong></a><em>une commande peut être nécessaire entre les événements, le cas échéant, par ex. <code>delay 0.5</code> avec le <em>valeur </em>de la <em>retarder </em>définis de manière appropriée.</em>

-1voto

user3579815 Points 329

Voici ma version, sans le nettoyage du début, que je vous recommande d'inclure.

tell application "System Preferences"
    activate
    delay 1

    reveal anchor "Clock" of pane id "com.apple.preference.dock"
end tell

tell application "System Events" to tell process "System Preferences"
    repeat until window "Dock & Menu Bar" exists
        delay 0.5
    end repeat

    repeat until checkbox "Announce the time:" of window "Dock & Menu Bar" exists
        delay 0.5
    end repeat

    tell window "Dock & Menu Bar"
        set theCheckBox to checkbox "Announce the time:"
        set theState to value of theCheckBox
        if theState is 0 then click theCheckBox
    end tell
end tell

tell application "System Preferences" to quit

PS : Pour une raison quelconque, j'ai rencontré un échec où la case à cocher ne pouvait pas être trouvée. Après inspection avec UI Browser, j'ai remarqué que la case à cocher était détachée. Je ne sais pas comment le problème a disparu et cela fonctionne pour moi maintenant. Vous pouvez également limiter la période d'attente au lieu d'attendre indéfiniment.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X