Apple events - AppleScript
tablier
Membre
Je souhaite interroger une autre application pour obtenir des informations.
Le dictionnaire Applescript de cette application est accessible.
??? Je lis la doc sur AppleScript et les Apple events, mais pour l'instant, cela m'apparait comme certains objects Cocoa, c'est à dire OPAQUE!!
Dans un projet "Cocoa Application", puis-je interroger l'application externe directement par des Apple events ou dois-je ajouter des handlers Applescript dans mon application pour faire l'intérogation (handlers que j'appelerai par des Apple events probablement)?
Si l'intérrogation directe est possible, que faut-il connaà®tre de l'application externe, en plus de son dictionnaire?
Le dictionnaire Applescript de cette application est accessible.
??? Je lis la doc sur AppleScript et les Apple events, mais pour l'instant, cela m'apparait comme certains objects Cocoa, c'est à dire OPAQUE!!
Dans un projet "Cocoa Application", puis-je interroger l'application externe directement par des Apple events ou dois-je ajouter des handlers Applescript dans mon application pour faire l'intérogation (handlers que j'appelerai par des Apple events probablement)?
Si l'intérrogation directe est possible, que faut-il connaà®tre de l'application externe, en plus de son dictionnaire?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
je crois que les apple events et les applescript n'ont rien à voire ensemble
Ah bon ???
Visiblement tu n'as jamais pris la peine de rendre tes applications scriptables ...
Le détail et là : http://developer.apple.com/documentation/Cocoa/Conceptual/ScriptableCocoaApplications/index.html
les AppleEvent ce sont des évènements envoyés à une application.
AppleScript est un langage de script permettant d'envoyer des AppleEvents facilement, en gros. Quand tu écris "tell application "Finder" to open selection" ça va envoyer un AppleEvent à l'application Finder avec le code de l'AppleEvent correspondant à la commande "open", et avec comme paramètre le fichier sélectionné...
C'est c'est au contraire étroitement lié.
Ce que je cherche a faire c'est me passer d'applescript. Mon controleur d'archivage "Incrémental" est un projet "AppleScript studio". J'interroge CDFinder en Applescript, mais c'est lent!
>:( Je lis donc la doc sur les Apple events et je n'arrive pas à concrétiser! J'ai l'impression qu'il me manque des informations pour écrire ces appels. La seule information que j'ai est le dictionnaire de CDFinder et je ne vois pas comment m'en servir lors de l'écriture des AE.
Mon copain Paul me dit que sous debugger AppleScript (lequel?), on peut voir les AE générés. Je ne suis pas arrivé à cela non plus!!
:-\\ Qui peut m'expliquer cela brièvement ou me mettre sur la bonne voie ou encore me trouver de bons exemples?
Je ne suis pas sur de saisir ton pb hors mis qu'un projet d'AppleScript studio est lent ce que je te concède volontiers.
Je ne vois pas comment générer des Apple Events isolés te permettrait de communiquer (échanger des infos) avec une autre appli. Mais c'est vrai que j'ai jamais ressenti le besoin de voir ça de près.
Par contre tu peux toujours appeler, compiler, exécuter... des Applescript dans une appli cocoa.
Tu peux surtout tout simplement limiter tes appels à des Apple Script compilés en les lançant isolément avec NSTask.
Cocoa ne permet pas de créer/envoyer des apple-events (uniquement recevoir).
Il te faut donc passer par Carbon.
.
ça, c'est moins facile comme programmation! je pense que je vais essayer quand même.
Pour les AppleEvents, je continue de lire et je suis tombé sur la phrase:
je résume:
Ou bien je peux obtenir les informations necessaires du concepteur de CDFinder (ce qui n'est pas impossible puisque nous correspondons régulièrement), ou bien je me contente de l'appleScript.
Si je me contente de l'appleScript, j'ai le choix entre rester en AppleScript Studio, ou passer en Objective-C avec des appels à CDFinder en AppleScript compilé.
En objective-C, appeler des handlers AScript ce fait (sic la doc) en utilisant des Apple events, Je suis revenu au point de départ !!!
??? Ai-je bien résumé mes choix?
Je ne sais pas.
Mais une chose que je sais est qu'il est extrêmement facile d'intégrer du AS dans un programme Objective-C/cocoa.
Je te joins un exemple qui permet d'ouvrir le dossier /Developer du mac dans le Finder, et qui demande le nom du premier élément de ce répertoire. Le nom est récupéré dans le prog ObjC bien sûr.
PS : je t'affiche le script AS plus clairement, car je l'ai condensé un peu dans la variable script :
[tt]tell application "Finder"
open folder "imac-g5:Developer"
get the name of the first item in folder "imac-g5:Developer"
end tell
[/tt]
.
Je connais déjà cette méthode qui consiste à créer, compiler et exécuter Dynamiquement un script. J'ai mis quelque chose comme cela dans le tutorial Cacao au chapitre "implémentation, suite".
Juste une chose, je n'ai pas dû comprendre la doc sur l'utilisation du pool mémoire, pourquoi ne mets-tu pas de [as release] avant de ressortir de la méthode?
Comme je cherche de la vitesse et que les paramètres à passer changent à chaque appel, les trois opérations sont à refaire à chaque fois. Je ne suis pas sur de gagner quelque chose par rapport au projet AppleScript Studio.
Bon, j'ai écrit à Norbert Doerner pour voir s'il me passe les informations qui me manquent pour écrire des appels directs à son programme.
Et enfin, je viens d'essayer AppleScrip debugger de "Late Night Sofware". Il me semble que c'est nettement plus performant que le debugger AppleScript d'Xcode. Juste un peu cher pour quelqu'un qui est un diletante à la retraite.
Parce que j'ai oublié !
.
Autant pour moi!
La dernière fois que j'ai utilisé les AppleEvent c'était il y 5 ans quand j'était encore sous MacOS9
J'aimerais savoir: si vous voulliez connaà®tre le nombre des listes de lecture enregistrées dans iTunes (par exemple),
quelle technologie utiliseriez-vous?
Et, autant que je m'en souvienne, le lancement de miniscript compilés (placés dans le bundle de son projet) donnait des résultats très convenables, malgrés le besoin qu'il avait en CPU (son appli en était gourmande pour gérer des animations fluides simultanées à ses requètes scriptées).
Et pourtant, à l'époque, son code était perfectible :P