1 votes

AppleScript pour contrôler les préférences de balance de sortie audio

Quand je couple mes écouteurs Bluetooth avec mon Mac Pro, l'équilibre du son dérive un peu aléatoirement, pas toujours, mais parfois.

Pour résoudre ce problème, j'ai créé une application avec AppleScript comme suit:

tell application "Préférences Système"
    activer
    révéler l'ancre "output" du volet id "com.apple.preference.sound"

    tell application "Événements Système"
        lancer
        dire au processus "Préférences Système" de dire au curseur 1 du groupe 1 du groupe d'onglets 1 de la fenêtre 1 de régler la valeur sur 0.5
    end tell
    tell l'application "Préférences Système"
        quitter
    end tell
 end tell

Cela devrait réinitialiser l'équilibre du son si j'exécute l'application.

Cependant, pour une raison quelconque, cela provoque un message d'erreur comme suit:

Impossible d'obtenir [[class tabg]] 1 de la fenêtre 1 de [[class prcs]] "Préférences Système" de l'application "Événements Système". Index invalide. (-1719)

Pourquoi est-ce que j'obtiens cela? Comment devrais-je corriger le code?

0 votes

Quelle version de macOS utilisez-vous ?

0 votes

C'est Catalina 10.15.7

1voto

user3439894 Points 52496

Il s'agit très probablement d'un problème de synchronisation dans la mesure où l'élément d'interface utilisateur cible n'est pas encore disponible pour être manipulé.

Le code AppleScript d'exemple, ci-dessous, a été testé dans Script Editor sous macOS Catalina et macOS Big Sur avec les paramètres de Langue & Région dans les Préférences Système définis sur English (US) — Primary et a fonctionné pour moi sans problème1.

  • 1 Supposant que les réglages nécessaires et appropriés dans les <strong>Préférences Système</strong> > <strong>Sécurité & Confidentialité</strong> > <strong>Confidentialité</strong> ont été définis/corrigés selon les besoins.

Code AppleScript d'exemple :

--  # Vérifiez si les Préférences Système sont 
--  # ouvertes et si oui, alors fermez-les.
--  # 
--  # Ceci est fait pour que le script ne faille pas
--  # s'il est ouvert et qu'une feuille modale est
--  # affichée, c'est pourquoi l'utilisation de 'killall'
--  # car 'quit' échoue lorsqu'il est utilisé ainsi, s'il l'est.
--  #
--  # Ceci est aussi fait pour permettre des comportements par défaut
--  # d'être prévisibles à partir d'une occurrence propre.

if l'application "Préférences Système" est en cours d'exécution then
    try
        dis à l'application "Préférences Système" de quitter
    on error
        faire script shell "killall 'Préférences Système'"
    end try
    pause 0.1
end if

--  # Assurez-vous que les Préférences Système ne sont pas ouvertes avant
--  # de les rouvrir. Sinon, il peut y avoir un problème
--  # lors de la tentative de réouverture pendant qu'elles se ferment réellement.

répéter tant que l'application "Préférences Système" est en cours d'exécution
    pause 0.1
fin répéter

--  # Ouvrez les Préférences Système dans l'onglet Sortie du panneau Son.

dis à l'application "Préférences Système" de ¬
    révéler l'ancre "output" de ¬
        le panneau id "com.apple.preference.sound"

--  # Attendez que l'élément d'interface utilisateur cible soit disponible pour être manipulé.
--  # Puis manipulez l'élément d'interface utilisateur cible.

dis à l'application "Évènements Système"
    dis à l'application processus "Préférences Système"
        définir i à 0
        répéter jusqu'à ce que existe curseur 1 de groupe 1 de groupe d'onglets 1 de fenêtre 1
            pause 0.1
            définir i à i + 1
            si i  30 then return
        fin répéter
        fixer la valeur du curseur 1 de groupe 1 de groupe d'onglets 1 de fenêtre 1 à 0.5
    fin dis
    pause 0.2
fin dis

dis à l'application "Préférences Système" de quitter

Remarques :

C'est le format de base que j'utilise pour tout Scripting UI des Préférences Système et j'ai ajouté des commentaires au code expliquant pourquoi je l'ai codé de cette manière.

Notez qu'en l'état, il ne montre pas l'interface utilisateur des Préférences Système car cela n'est tout simplement pas nécessaire dans ce cas d'utilisation.

En supposant que les Préférences Système sont fermées lorsque le code AppleScript d'exemple est exécuté, tout ce que vous verrez en ce qui concerne les Préférences Système est l'icône des Préférences Système rebondir sur le Dock pendant un moment.


Remarque : Le <em>code</em> <strong>AppleScript</strong> <em>d'exemple</em> n'inclut aucun <em>gestion d'erreur</em> supplémentaire, c'est juste un exemple et il revient à l'utilisateur d'ajouter toutes les <em>gestion d'erreur</em> nécessaires ou voulues. Consultez l'<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>instruction</strong></a> <em>try</em> et l'<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>instruction</strong></a> <em>error</em> dans le <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guide de Langage AppleScript</strong></a>. Voir également, <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>Travail avec les Erreurs</strong></a>. De plus, 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>commande de délai</strong></a> peut être nécessaire entre les événements le cas échéant, par exemple <code>pause 0.5</code>, avec la <em>valeur</em> de la <em>pause</em> définie de manière appropriée.

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