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>