IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> [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
Options
Kak Miortvi Peng...
posté 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.
Go to the top of the page
 
+Quote Post
Pascal 77
posté 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 !
Go to the top of the page
 
+Quote Post
Kak Miortvi Peng...
posté 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.
Go to the top of the page
 
+Quote Post
Pascal 77
posté 14 Jun 2014, 16:23
Message #4


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 052
Inscrit : 10 Oct 2005
Membre no 47 611



Citation (Kak Miortvi Pengvin @ 14 Jun 2014, 14:45) *
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 !
Go to the top of the page
 
+Quote Post
Guest_JacqR_*
posté 14 Jun 2014, 17:09
Message #5





Guests






Bonjour,

Citation (Kak Miortvi Pengvin @ 14 Jun 2014, 04:23) *
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
Go to the top of the page
 
+Quote Post
Kak Miortvi Peng...
posté 14 Jun 2014, 18:34
Message #6


Adepte de Macbidouille
*

Groupe : Membres
Messages : 55
Inscrit : 7 Oct 2006
Membre no 69 893



Citation (JacqR @ 14 Jun 2014, 18:09) *
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.
Go to the top of the page
 
+Quote Post
Guest_JacqR_*
posté 15 Jun 2014, 02:45
Message #7





Guests






Citation (Kak Miortvi Pengvin @ 14 Jun 2014, 13:34) *
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.
Go to the top of the page
 
+Quote Post
Kak Miortvi Peng...
posté 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. smile.gif


--------------------
from future import developers, informatique entropique en dilettante.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 26th April 2024 - 16:43