[?]   dans   mode   trier par   

[<] Sujet : [AS] Lancer un script depuis du code ObjC
De : FresLoc <anonyme@...>
Date : 2008-01-27 21:11:50

Sujet : Re: [AS] Lancer un script depuis du code ObjC
De : Daniel Varlet <anonyme@...>
Date : 2008-01-28 18:12:16

Sujet : Re: [AS] Lancer un script depuis du code ObjC
De : FresLoc <anonyme@...>
Date : 2008-01-28 22:43:14

Sujet : Re: [AS] Lancer un script depuis du code ObjC
De : Daniel Varlet <anonyme@...>
Date : 2008-02-06 16:51:37

Re,

Tout d'abord désolé pour le délai de réponse, je viens TOUT juste de récupérer ma connexion. Une sombre histoire téléphonique...

Je réponds aux 2 messages.
Je laisse toutes les citations pour rafraîchir la mémoire (et gêner la lecture, beurre, argent du beurre, crémière perverse, toussa).

À 22:43 +0100 le 28.01.08, FresLoc écrivait au sujet de "Re: [AS] Lancer un script depuis du code ObjC" :
>Re,
>
>
>>> Je voudrais depuis Cocoa, du code ObjC envoyer une NSString sur la
>>> zone en cours de saisie qui donc est forcément au premier plan...
>>
>> Mouais, l'utilisateur est farceur, mais bon OK..
>>
>>> L'application en tâche de fond connecte un appareil en Bluetooth et
>>
>> Quelle application? La principale? Un helper? Un applet AS?
>>
>>> doit envoyer les données sur l'appli de premier plan...
>>
>> Encore une autre appli...
>
>Je développe un soft de devis/métré, qui permet de recevoir en 
>Bluetooth les mesures faites par un Laser-Mètre ( Disto - Leïca ) En 
>attendant que tout ça soit opérationnel nous avons extrait un mini 
>développement réalisé en Cocoa qui envoi ça sur l'application de 
>premier plan, en quelque sorte un utilitaire.
>Celui-ci affiche temporairement ( au démarrage ) une fenêtre de 
>parametrage permettant d'établir la connexion et une icône dans la 
>barre de menu avec un petit menu, pour faire réapparaître cette 
>fenêtre, ou quitter par exemple, etc... U
>
>La réception sur le Mac se passe bien la réception dans une NSString 
>est correcte, si c'est sur la fenêtre de l'application les caractères 
>arrivent correctement, pour l'envoi sur la zone de premier plan de 
>n'importe quelle application en cour de saisie pose problème, il est 
>utiliser une routine du clavier pour en quelque sorte se substituer a 
>celui-ci, mais ça ne fonctionne pas comme il faut, d'où l'idée 
>d'utiliser un AppleScript qui lui se chargera donc de coller au
>format texte les valeurs reçues...
>

Les Services peuvent passer des données entre les applis. Un truc "simple" sous-exploité en OS X.

> >> Au cas ou cette appli est au premier plan
>>
>> Là je suis perdu.
>
>
>>> si le script peut l'envoyer
>>> au fond, ça n'est que mieux, mais pas indispensable...
>>
>> Un script AS peut masquer une appli ou en faire venir une au 
>> premier plan.
>> Sauf erreur, la bazarder en "fin" de *toutes* les applis visibles 
>> est peut-être possible, mais certainement un peut lourd à scripter. 
>> Si c'est optionnel mieux vaut garder ça pour les touches finales à 
>> faire un jour de pluie.
>
>Si la fenêtre de cet utilitaire est ( par erreur au premier plan ) la
>rétrograder, rien de primordial...

Pour passer une appli au second plan, un truc un peu lourdingue:

tell application "BBEdit" to activate
delay 2
tell application "Finder" -- ou System Events
	tell process "BBEdit"
		set visible to false -- masqué: passe en deuxième position
		set visible to true -- demasqué: redevient visible
	end tell
end tell

Le plus simple serait d'activer l'appli cible. Elle passerait au premier plan.

<Sous Leopard (AS v2.0)>
Une application n'est plus nécessairement lancée avec un tell. On peut même accéder (sans qu'elle soit lancée) à certaines propriétés spécifiques. Je suppose que c'est lu dans Info.plist.

Plus intéressant pour toi, une application est maintenant lancée en étant invisible. Il faut préciser launch ou activate pour la visualiser.
</Sous Leopard (AS v2.0)>

>
>
>>> Par contre je souhaiterais que dans ce code il y ait appel a un objet
>>> script séparé de façon a modifier ce dernier indépendamment...
>>
>> Dans quel code? Cocoa? AS? Quel objet script?
>> Je pousse un peu, car je pense avoir saisi, mais pas la peine de 
>> démarrer sur de fausses intuitions. Voir néanmoins (1) en me basant 
>> sur le titre de ton message.
>
>Cocoa oui bien-sur, l'envoi d'une valeur depuis le disto, provoque un 
>événement sur Mac, qui est donc capté, une fois la valeur reçue et
>traitée envoyée sur la zone en cours de saisie....

Tout s'éclaire...

>
> > Je n'ai donc pas compris la/les questions. Si c'est pour savoir 
>> comment lancer un script AS en Cocoa, j'ai des notions (sans plus). 
>> Je connais au moins trois façons.
>> Et/Si c'est pour le script AS  lui-même, c'est encore autre chose.
>> Bref, il faudrait éclaircir ta, ou tes questions. Et simplifier si 
>> possible.
>
>J'ai essayé...

Vini, vidi, etc...

>
>J'ai lu ce qui suit, pas tout compris non plus, c'est nouveau pour
>moi ;-)

Je ne jongle pas non plus.

>Globalement je souhaiterais que le script soit une ressource soit 
>dans xCode, soit dans IB, enfin que la ressource soit indépendante de 
>façon a pouvoir modifier celle-ci indépendamment du code et pouvoir 
>tester le cas échéant avec AS...
>
>En tous cas merci pour cette réponse assez complète quant même...
>Je devrais aussi recevoir le livre d'Etienne Vautrin qui devrait 
>compléter tout ça...
>
>@+
>
>Gilles...
>
>
>>
>> (1)
>> En Cocoa, pour lancer un fichier script, ça peut donner ça (extrait 
>> d'un projet test).
>>
>> - (IBAction)launchAS_externalScript:(id)sender
>> {
>>	NSLog(@"%@", NSStringFromSelector(_cmd));		// Debug
>>	
>>	NSDictionary *asError = nil;
>>	
>>	// Script path
>>	NSBundle *bundle = [NSBundle mainBundle];
>>	NSString *path = [bundle pathForResource:@"toto" ofType:@"scpt" 
>> inDirectory:@"Scripts"];
>>	if (nil == path) {
>>		NSLog(@"Missing script.");
>>		return;
>>	}
>>	NSURL *url = [NSURL fileURLWithPath:path];
>>	NSLog(@"url: %@", url);
>>	
>>	// Load script
>>	NSAppleScript *script = [[NSAppleScript alloc] 
>> initWithContentsOfURL:url error:&asError];
>>	NSLog(@"%@", [script source]);		// OK même avec erreur de compil
>>
>>	if (nil != asError) {
>>		NSLog(@"%@", asError);
>>		return;
>>	}
>>	
>>	[script executeAndReturnError:&asError];
>>	if (nil != asError) {
>>		NSLog(@"%@", asError);
>>		return;
>>	}
>> }
>>
>> Il y a des subtilités à régler dans Xcode (v2.0):
>>
>> - Pour que le script soit placé directement dans le dossier ".../
>> Contents/Resources/Scripts" à la compile, rajouter une Build Phase 
>> "Compile AppleScripts" dans le target, avec les scripts qui vont 
>> bien. Même s'il s'agit de scripts déjà compilés.
>> Placer les scripts dans ce dossier du Bundle permet d'y accéder si 
>> on utilise la fonctionnalité "Assigning an AppleScript to a Cocoa 
>> Object" d'Interface Builder. Autre manière, sans code, utilisée 
>> entre autre par ASStudio. cf la doc minable d'IB (salut Alain).
>> Pas la peine de perdre 10 minutes (seulement? hem...) que j'ai 
>> perdu pour trouver ça.
>>
>> - Ajouter aux Linked Frameworks: AppleScriptKit.framework.
>>
>> A+
>>
>> --
>> Daniel
>>
>> _______________________________________________
>> Applescript_fr mailing list
>> anonyme@...
>> http://listes.patpro.net/mailman/listinfo/applescript_fr
>
>_______________________________________________
>Applescript_fr mailing list
>anonyme@...
>http://listes.patpro.net/mailman/listinfo/applescript_fr


À 11:17 +0100 le 29.01.08, FresLoc écrivait au sujet de "[AS] "Lancer un script depuis Cocoa, comment j'" envoie le " :
>Bonjour,
>Le 28 janv. 08 à 18:12, Daniel Varlet a écrit :
>
>> En Cocoa, pour lancer un fichier script, ça peut donner ça (extrait 
>> d'un projet test).
>
>Finalement la seule question qui me reste est comment j'envoie le 
>paramètre ici une NSString ?
>
>Cdt - Gilles

Voilà les ennuis continuent...  ;-)
Même si je suppose que depuis le temps tu as trouvé une solution.
 

Pour le code que j'ai donné tu devras certainement utiliser:
 - (NSAppleEventDescriptor *)executeAppleEvent:(NSAppleEventDescriptor *)event error:(NSDictionary **)errorInfo
Et là je n'ai pas le temps de farfouiller NSAppleEventDescriptor....
Plus tard peut-être.

Autre solution: dans le script lui-même récupérer le contenu de la NSString.
Technique ASStudio.

Exemple simple avec un NSTextField idoinement paramétré AppleScript dans IB (name: textField1; Scope:Global):

[SCRIPT]
on run
	log "titi.scpt:run()"
	set s to contents of text field "textField1" of window 1
	display alert "titi.scpt:run()" & return & s
end run

on clicked theObject
	log "titi.scpt:cliked()"
	set s to contents of text field "textField1" of window 1
	activate
	display alert "titi.scpt:cliked()" & return & s
end clicked
[/SCRIPT]

Le Event clicked theObject est uniquement là pour test si connecté dans IB avec un bouton.
Note: Pour simplifier/tests, même si tu n'as pas besoin de ce NSTextField dans ton appli tu peux en faire un invisible.

A+

-- 
Daniel

_______________________________________________
Applescript_fr mailing list
anonyme@...
http://listes.patpro.net/mailman/listinfo/applescript_fr

Apple, AppleScript, AppleScript Studio, AppleTalk, AppleWorks, ColorSync, Finder, HyperCard, iBook, iLife, iMac, iWork, Keynote, Mac, Macintosh, Mac OS, Pages, Panther, PowerBook, Power Mac, Power Macintosh, QuickTime, Safari, Tiger, Xcode sont des marques déposées par Apple Computer, Inc., enregistrées aux Etats-Unis et dans les autres pays. Liste officielle