[AppleScript] modifier les touches du clavier ?!

  • Créateur du sujet Créateur du sujet NoAPM
  • Date de début Date de début

NoAPM

Membre enregistré
10 Mai 2010
8
0
39
Bonjour !

je suis néophyte, je tente de faire petit programme tres simple sur appleScript :
lorsque j'appuie sur une touche dans Writeroom ou textEdit je voudrais que cela écrive autre chose.

Ex : si je tappe "b" ou "B" il s'écrive "Bleu"

Je n'arrive pas a dire en AppleScript "quand l'utilisateur appui sur b"
J'ai un problème de script, je voudrais qu'il dure a l'infini (ou tant que je ne lui ai pas dit stop).

voila mon script ...
tell application "WriteRoom"
activate
end tell
tell application "System Events" to keystroke "n" using command down

if keystroke "b" then
tell application "System Events" to keystroke "Bleu"
end if
Merci de votre aide !

---------- Nouveau message ajouté à 19h02 ---------- Le message précédent a été envoyé à 17h19 ----------

j'ai trouvé bcp plus interessant pour mon usage : http://startly.com/products/quickeys/mac/4/
C'est exactement ce que je voulais !

bon maintenant quelqu'un sait comment mettre un variable a la place du N° 25 :
tell application "System Events" to keystroke "BlueSky N°25"

je suis aussi entrain de chercher comment repeter une action pendant x minutes ...
Quelqu'un a une idée ?

cela serait fantastique !
 
Bonjour,

bon maintenant quelqu'un sait comment mettre un variable a la place du N° 25 :

Comme ceci
Bloc de code:
tell application "System Events" to keystroke ("BlueSky " & laVariable)

je suis aussi entrain de chercher comment repeter une action pendant x minutes ...
cela serait fantastique !

Voici un exemple
Bloc de code:
set d to current date
repeat
	-- code pour ton actiom

	if (current date) - d > 120 then exit repeat -- le nombre 120 est le nombre de secondes --> 2 minutes
end repeat
 
Merci beaucoup, cela m'a bien aidé !!
voila le resultat :

tell application "WriteRoom"
activate
end tell
tell application "System Events" to keystroke "n" using command down

set d to current date

repeat

set actionDuVent to {" _ plusieurs textes poétique en cours d'écriture _ "}
set randomAction to some item of actionDuVent

tell application "System Events" to keystroke (" " & (current date) & " Data " & randomAction)
tell application "System Events" to keystroke (ASCII character 13)
delay 0.1

if (current date) - d > 10 then exit repeat

end repeat

Vous pensez que cela marche sur un vieux mac ayant un OS 1.3 ???
Il vaux mieux que je fasse une version logiciel ou une version scpt ?
et savez vous si c'est possible de faire un bouton d'urgence pour arreter le repeat (car le programme est en full screen) ?
j'ai essayer cmd+tab pendant la boucle mais ce n'est pas une bonne solution du tout ...
 
Vous pensez que cela marche sur un vieux mac ayant un OS 1.3 ???
Il vaux mieux que je fasse une version logiciel ou une version scpt ?
et savez vous si c'est possible de faire un bouton d'urgence pour arreter le repeat (car le programme est en full screen) ?
j'ai essayer cmd+tab pendant la boucle mais ce n'est pas une bonne solution du tout ...
Cela devrait fonctionner sur Mac OS X 10.3 +

Script ou application, c'est ton choix si tu préfères le lancer par le menu script, raccourci-clavier ou l'ouvrir l'application par le Finder.

bouton d'urgence, non ce n'est pas possible, il faut mettre une autre condition dans la boucle pour l'arrêter.
Mais quelle condition ?
 
L'idée serait de faire "un bouton d'urgence type : cmd + p (par exemple)
je n'arrive pas à trouver le code pour dire "lorsque ce bouton est appuyé faire ..."
 
Bojour,

L'idée serait de faire "un bouton d'urgence type : cmd + p (par exemple)
je n'arrive pas à trouver le code pour dire "lorsque ce bouton est appuyé faire ..."
Ce n'est pas possible par touche, AppleScript n'a aucune commande pour récupérer les touches pressées, sauf par ajout d'osax ou d'un exécutable en ligne de commande dans le système.

La solution :
C'est de sortir du plein écran quand tu voudras arrêter le script, (commande + Entrée).
Le script vérifie la propriété resizable de la première fenêtre de "WriteRoom", si elle est resizable, c'est que "WriteRoom" n'est plus en plein écran.

Mais, cela ne fonctionnera pas avec ton script, parce que lorsque tu presseras les touches (commande + Entrée), ces touches seront a la fin des touches simulées par le script.
Le probléme avec keystroke est que le script va plus vite que "WriteRoom" pour écrire le texte dans la fenêtre.
Exemple: pendant ces 10 secondes, le script simulera les touches pour environ 55 lignes, après le script quitte, mais "WriteRoom" prendra environ 1 minute pour écrire ces lignes.

Aucun problème avec ce script, car il n'utilise pas la commande keystroke.
Bloc de code:
tell application "WriteRoom"
	activate
	make new document
end tell

set t_contents to ""
set d to current date

repeat
	set actionDuVent to {" _ plusieurs textes poétique en cours d'écriture _ "}
	set randomAction to some item of actionDuVent
	set t_contents to t_contents & (" " & (current date) & " Data " & randomAction) & return
	tell application "WriteRoom"
		set text contents of document 1 to t_contents
		set notFullScreen to resizable of window 1
	end tell
	
	if notFullScreen or (current date) - d > 10 then exit repeat
	delay 0.1
end repeat
 
Merci MacJac pour l'aide, c'est génial !
par contre, je n'arrive pas à comprendre le t_contents faut il mettre quelque chose dans les crochets de sa définition ?
 
Bonjour,

par contre, je n'arrive pas à comprendre le t_contents faut il mettre quelque chose dans les crochets de sa définition ?
C'est une initialisation de la variable, car il est utilisé pour concaténer les lignes de texte, sinon une erreur de variable non définie s'affichera.

Cette variable contient le même texte que le contenu de la fenêtre de "WriteRoom"
Si vous voulez un mot ou une phrase dans la première ligne, oui vous pouvez ajoutez du texte.
 
je ne comprend pas pourquoi cela ne marche pas : il est impossible d'obtenir content avec textedit...
je suis repassé sur text edit et pour l'instant je ne touche pas trop à l'histoire du pleine ecran.

Bloc de code:
tell application "TextEdit"
    activate
    make new document
end tell

set t_contents to ""
set d to current date

repeat
    set actionDuVent to {"module la surface d'un océan, d'une mer ou d'un lac, il crée une agitation sous la forme d'une succession de vagues", "siffle sur les longues pales blanches en epoxy des éoliennes", "polie les roches", "gonfle les voiles des bateaux", "soulève tes cheveux", "renverse un pot de géranium", "atteint 1400 km/h sur Neptune", "s'engouffre dans les manches rouge et blanche", "s'appel Eole ", "est provoqué par un réchauffement inégalement réparti à la surface de la planète par l’énergie solaire, et par la rotation de la planète."}
    set randomAction to some item of actionDuVent
    set t_contents to t_contents & (" " & (current date) & " A ce moment précis, Il " & randomAction) & return
    tell application "TextEdit"
        set text contents of document 1 to t_contents
    end tell
    
    if (current date) - d > 30 then exit repeat
    delay 0.1
end repeat
 
Bonjour,

je ne comprend pas pourquoi cela ne marche pas : il est impossible d'obtenir content avec textedit...
Les commandes de chaque application ne sont pas toujours les mêmes.
Pour TextEdit c'est :
Bloc de code:
tell application "TextEdit"
	set text of document 1 to t_contents
end tell
 
Merci beaucoup MacJack, tu es d'une aide precieuse !
Je ne comprend pas comment tu arrives (et les autres personnes aussi) à connaitre tout les petits détails d'une language de programmation ? je comprend bien que c'est une langue mais pour l'apprendre il faut avoir des cours ou au moins avoir des exemple (ou un dictionnaire grammatical) ... ou est donc le dictionnaire de AppleScript ? Comment peux t'on connaitre les limite d'un logiciel ?

...
Sinon comment adapter la fenêtre a la totalité de l'ecran sans faire du full screen ?
 
Je ne comprend pas comment tu arrives (et les autres personnes aussi) à connaitre tout les petits détails d'une language de programmation ?
La documentation en français du langage général de l'AppleScript est ici --> http://trad.applescript.free.fr/applescript.html

Comment peux t'on connaitre les limite d'un logiciel ?
Pour connaître les commandes, fonctions et propriétés de chaque application :
il faut ouvrir leurs dictionnaires AppleScript

Ouvre-le par le menu "Fichier" --> "Ouvrir un dictionnaire...". dans l'éditeur de script

Ou, glisse l'application et dépose-le sur l'icône de l'éditeur de script

Ou par le menu "Fenêtre" --> "Bibliothèque". dans l'éditeur de script, tu peux ajouter ou supprimer des applications à partir de cette fenêtre, double-clic pour ouvrir un dictionnaire

Sinon comment adapter la fenêtre a la totalité de l'ecran sans faire du full screen ?
En spécifiant sa dimension dans le bounds de la fenêtre, exemple
Bloc de code:
tell application "TextEdit"
	activate
	make new document
	set bounds of front window to {0, 0, 1600, 1024}
end tell

Edition :
Il y a aussi les commandes de l'osax "StandardAdditions.osax"

Regarde son dictionnaire, il est dans le dossiers "ScriptingAdditions" du dossier "Bibliothèque" du dossier "Système"
 
Dernière édition par un modérateur:
Génial !

Mais je me suis rendu compte que la fenêtre ne suivait plus le déroulement du texte, (il reste en haut). j'ai cherché dans les liens que tu m'as donné mais je ne trouve pas ...

Sinon j'ai essayé de faire une version pour writeroom (pour le pleine écran) mais je n'arrive pas a delete le texte a la fin de la boucle, les raccourcis de ce logiciel ne sont vraiment pas habituel ...

Et dernière question, si je veux adapter a une fenêtre dont je ne connais pas la resolution maximum, y a t'il une solution ?
 
Bonjour,

Mais je me suis rendu compte que la fenêtre ne suivait plus le déroulement du texte, (il reste en haut).
il n'y a pas de commande dans TextEdit pour cela, il faut utiliser le keystroke.

Sinon j'ai essayé de faire une version pour writeroom (pour le pleine écran) mais je n'arrive pas a delete le texte a la fin de la boucle, les raccourcis de ce logiciel ne sont vraiment pas habituel
Je ne sais pas, sauf de sélectionner les lignes avec la souris et presser la touche de suppression.


Et dernière question, si je veux adapter a une fenêtre dont je ne connais pas la resolution maximum, y a t'il une solution ?
Il y a diverses solutions qui ont des inconvénients, si la machine n'as qu'un seul écran (bounds of window of desktop) fonctionne.

Aussi, TextEdit est scriptable pour ajouter des lignes, c'est mieux que d'ajouter tout le texte.

Voici le script.
Bloc de code:
tell application "Finder" to set tBounds to bounds of window of desktop
tell application "TextEdit"
	activate
	set tDoc to make new document
	set bounds of front window to tBounds
end tell

set actionDuVent to {"module la surface d'un océan, d'une mer ou d'un lac, il crée une agitation sous la forme d'une succession de vagues", "siffle sur les longues pales blanches en epoxy des éoliennes", "polie les roches", "gonfle les voiles des bateaux", "soulève tes cheveux", "renverse un pot de géranium", "atteint 1400 km/h sur Neptune", "s'engouffre dans les manches rouge et blanche", "s'appel Eole ", "est provoqué par un réchauffement inégalement réparti à la surface de la planète par l’énergie solaire, et par la rotation de la planète."}

set d to current date
repeat
	set randomAction to some item of actionDuVent
	set aText to (" " & (current date) & " A ce moment précis, Il " & randomAction) & return
	tell application "TextEdit" to make new paragraph at end of paragraphs of text of tDoc with data aText
	tell application "System Events" to keystroke (ASCII character 31) -- fléche en bas, scroll si besoin
	
	if (current date) - d > 30 then exit repeat
	delay 0.1
end repeat