[AppleScript] Erreur AppleScript lors de la navigation dans les préférences système [Résolu], Pour contrôle le comportement des touches fonctions avec Alfred |
Bienvenue invité ( Connexion | Inscription )
[AppleScript] Erreur AppleScript lors de la navigation dans les préférences système [Résolu], Pour contrôle le comportement des touches fonctions avec Alfred |
14 Jun 2014, 09:23
Message
#1
|
|
Adepte de Macbidouille Groupe : Membres Messages : 55 Inscrit : 7 Oct 2006 Membre no 69 893 |
Bonjour à tous.
Je cherche à construire un petit workflow Alfred pour contrôler le comportement de mes touches de fonction. Après quelques recherches sur le web, j'ai fini par trouver des informations utiles et des exemples en AppleScript. Et j'ai réussi à obtenir ce que je voulais finalement. Maintenant, j'aimerais rentre le comportement un peu plus propre afin de proposer l'extension Alfred sur mon blog (sait-on jamais, ça pourrait intéresser des gens). Je vous explique mon souci. Le code que j'ai trouvé sur le web permet de détecter si l'accessibilité est activée. Si ce n'est pas le cas, les préférences systèmes s'ouvrent et un message d'alerte s'affiche. J'ai modifié le code pour qu'il soit compatible avec Mavericks (10.9.3) et je parviens à ouvrir les préférences de Sécurité et confidentialité mais pas à ouvrir le panneau Confidentialité (ce panneau là). Voici le code correspondant. Code tell application "System Preferences" activate -- set current pane to pane "com.apple.preference.universalaccess" set current pane to pane "com.apple.preference.security" click radio button "Confidentialité" of tab group 1 of window "Sécurité et confidentialité" display dialog "UI element scripting is not enabled. Please activate \"Enable access for assistive devices\"" end tell Et voici l'erreur que me renvoient le débugger d'Alfred et l'éditeur d'AppleScript. Code [ERROR: alfred.workflow.action.applescript] { NSAppleScriptErrorBriefMessage = "Expected end of line, etc. but found identifier."; NSAppleScriptErrorMessage = "Expected end of line, etc. but found identifier."; NSAppleScriptErrorNumber = "-2741"; NSAppleScriptErrorRange = "NSRange: {1078, 5}"; } L'éditeur d'AppleScript, après affichage du message d'erreur, situe le problème au niveau du mot radio ligne 5. J'ai cherché sur le web mais je ne suis pas parvenu à identifier la raison de mon problème et ma méconnaissance totale du langage ne m'aide pas du tout. Auriez-vous une idée de ce qui me cause ça ? En vous remerciant d'avance pour votre aide, KMP. Ce message a été modifié par Kak Miortvi Pengvin - 15 Jun 2014, 08:35. -------------------- from future import developers, informatique entropique en dilettante.
|
|
|
14 Jun 2014, 11:07
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 3 052 Inscrit : 10 Oct 2005 Membre no 47 611 |
Je ne sais pas, mais tu pourrais tenter d'effectuer l'opération manuellement en mettant l'éditeur Applescript en enregistrement, ainsi, tu verrais la bonne syntaxe !
-------------------- Un Windows pour les gouverner tous, un Windows pour les trouver, et dans les ténèbres, les lier … Euuh je vais pitêt rester sur Mac !
|
|
|
14 Jun 2014, 13:45
Message
#3
|
|
Adepte de Macbidouille Groupe : Membres Messages : 55 Inscrit : 7 Oct 2006 Membre no 69 893 |
Je ne suis malheureusement pas parvenu à enregistrer ce qu'il se passait dans les préférences système (je ne connaissais pas cette fonction donc c'est déjà un progrès).
-------------------- from future import developers, informatique entropique en dilettante.
|
|
|
14 Jun 2014, 16:23
Message
#4
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 3 052 Inscrit : 10 Oct 2005 Membre no 47 611 |
Je ne suis malheureusement pas parvenu à enregistrer ce qu'il se passait dans les préférences système (je ne connaissais pas cette fonction donc c'est déjà un progrès). Ah ? Bon, il est vrai que toutes les applications scriptables ne sont pas forcément enregistrables, mais il me semblait que les prefs système l'étaient. désolé. -------------------- Un Windows pour les gouverner tous, un Windows pour les trouver, et dans les ténèbres, les lier … Euuh je vais pitêt rester sur Mac !
|
|
|
Guest_JacqR_* |
14 Jun 2014, 17:09
Message
#5
|
Guests |
Bonjour,
J'ai modifié le code pour qu'il soit compatible avec Mavericks (10.9.3) et je parviens à ouvrir les préférences de Sécurité et confidentialité mais pas à ouvrir le panneau Confidentialité (ce panneau là). Vous devez utiliser l'application "System Events" lorsque vous voulez programmer les click ou autre chose utilisant le Gui Scripting. Code tell application "System Preferences" activate set current pane to pane "com.apple.preference.security" end tell tell application "System Events" -- tell tab group 1 of front window of process "System Preferences" -- on spécifie un élément avec le nom l'application click radio button "Confidentialité" -- onglet "Confidentialité" delay 0.2 select row 5 of table 1 of scroll area 1 -- rangée "Accessibilité" end tell end tell Comme l'accessibilité n'est pas activée, vous ne pouvez pas utiliser les click, keystroke, sélect, etc.. Voici un script qui n'utilise pas le Gui Scripting pour ouvrir le bon panneau : Code tell application "System Preferences"
activate reveal anchor "Privacy_Accessibility" of pane id "com.apple.preference.security" -- ouvre l'onglet "Confidentialité" des préférences de Sécurité et sélectionne la rangée "Accessibilité" dans le tableau de gauche end tell |
|
|
14 Jun 2014, 18:34
Message
#6
|
|
Adepte de Macbidouille Groupe : Membres Messages : 55 Inscrit : 7 Oct 2006 Membre no 69 893 |
Comme l'accessibilité n'est pas activée, vous ne pouvez pas utiliser les click, keystroke, sélect, etc.. Bon sang mais c'est bien sûr ! Essayer d'utiliser ce que l'on a détecté comme désactivé est quelque chose de très malin… Merci bien en tout cas, la solution est intégrée et parfaitement fonctionnelle. Du coup, j'en profite pour poser une question annexe : avec le GUI Scripting, peut-on adresser les éléments par un nom qui ne dépende pas de la langue de l'utilisateur ? Dans l'exemple au dessus, peut-on cliquer sur "Confidentialité" sans donner un nom français ? -------------------- from future import developers, informatique entropique en dilettante.
|
|
|
Guest_JacqR_* |
15 Jun 2014, 02:45
Message
#7
|
Guests |
Du coup, j'en profite pour poser une question annexe : avec le GUI Scripting, peut-on adresser les éléments par un nom qui ne dépende pas de la langue de l'utilisateur ? Dans l'exemple au dessus, peut-on cliquer sur "Confidentialité" sans donner un nom français ? C'est possible en utilisant l'index du bouton --> Code click radio button 4 -- onglet "Confidentialité" Aussi, c'est possible avec 'localized string', mais pas pour tout. Il faut aller dans le dossier "Resources" du bundle de l'application ou du ".prefPane", ouvrir le dossier "French.lproj", tous les fichiers qui ont l'extension ".strings" sont des fichiers de localisation. Il faut ouvrir un de ces fichiers avec un Éditeur de texte comme TextWrangler, cela ne fonctionne pas avec TextEdit sur la plupart de ces fichiers. Il faut rechercher le nom de l'élément entre <string>et</string> et prendre le texte au dessus entre les balises <key>. Voici un exemple avec l'application "Apercu": Code set tfile to choose file with prompt "Sélectionne une image ou un fichier PDF." tell application "Preview" activate open tfile end tell tell application "System Events" -- tell process "Preview" -- le nom du process keystroke "," using command down -- ouvre les préférences d'Aperçu set t to my getLocalizedString("200079.title", "Preview", "PVPreferences") -- PVPreferences est le nom du fichier ".strings" click radio button t of radio group 1 of front window -- clic sur le bouton "Ouvrir tous les fichiers dans une fenêtre" keystroke "w" using command down -- ferme la fenêtre "Préférences" set mItem to my getLocalizedString("Rectangular Selection", "Preview", "Localizable") -- Localizable est le nom du fichier ".strings" click menu item mItem of menu 1 of menu bar item 7 of menu bar 1 -- Sélectionne le menu "Sélection rectangulaire" dans le menu "Outils" end tell end tell on getLocalizedString(tKey, appName, tTable) tell application appName set x to localized string tKey from table tTable end tell if x = tKey then return missing value -- aucune localisation return x end getLocalizedString Voici un exemple pour le panneau de preference "Sécurité et confidentialité" Code return my getLocalizedString("ACCESSIBILITY", "/System/Library/PreferencePanes/Security.prefPane", "Localizable") --> resultat = "Accessibilité" on getLocalizedString(tKey, tpath, tTable) set tBdle to (POSIX file tpath) as alias set x to localized string tKey from table tTable in bundle tBdle if x = tKey then return missing value -- aucune localisation return x end getLocalizedString Mais la plupart des localisation des ui éléments sont dans les fichiers ".nib", donc ce n'est pas possible de les avoir facilement. |
|
|
15 Jun 2014, 08:34
Message
#8
|
|
Adepte de Macbidouille Groupe : Membres Messages : 55 Inscrit : 7 Oct 2006 Membre no 69 893 |
D'accord. Je testerai ça. Merci pour tout.
-------------------- from future import developers, informatique entropique en dilettante.
|
|
|
Nous sommes le : 17th April 2024 - 07:32 |