Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Mac OS 9 _ comment simuler la touche return par applescript sur OS9 ?

Écrit par : JB7 15 May 2024, 10:12

Je lance cette bouteille à la mer parce que je ne m’en sors pas.

Je suis sur un MacBook Pro de 2014 OS 10.13.6

J’utilise sheepshaver pour émuler OS 9.0.4 pour utiliser une application (limelight) et notamment sa fonction d’importation qui est scriptable, c’est à dire qu’applescript sait la déclencher.
Le bout de script qui m’intéresse bien et qui marche, est le suivant :


tell application "Finder" to set outfile to "MacOS9:Desktop Folder:fichierdesortie"
tell application "Finder" to set aFile to "Unix:titi:Tititext:Fichier_01.Text"

tell application "LimeLight_P"
activate
import file aFile to file outfile
end tell

Et voilà le gros « MAIS » qui me bloque complètement.
La fonction d’import ouvre une boite de dialogue et je dois cliquer sur « OK » (elle est émise par limelight, je ne peux rien y changer).
Je voudrais que le script valide lui-même ce OK (ce sera toujours la bonne réponse à la boite de dialogue).

J'ai fouillé la toile, j'ai la vague impression que quickeys pourrait m'aider...
J'ai aussi compris que sur OSX c'est assez simple (il suffit de passer par system event) mais ça n'existe pas sur OS9...
Donc je suis largué (et pas très doué).
Alors je me dis qu'avec un peu de chance il y a ici quelqu'un pour qui c'est super facile...




Écrit par : baron 15 May 2024, 11:08

Bonjour et bienvenue ! smile.gif

Tu ne peux pas utiliser une commande comme ceci ?

Code
click button "OK"

unsure.gif

Écrit par : JB7 15 May 2024, 13:09

Chic une réponse ! smile.gif

click button "OK"
donne une erreur de syntaxe à la compilation.
("Exected end of line, etc. but found identifier.")
j'ai donc supposé que ça ne marche pas sur OS9. Aurais-je faux ?

sur OSX, la solution serait :

tell application "System Events"
key code 36
end tell

Écrit par : baron 15 May 2024, 15:56

Comme disent les Anglais, la preuve est dans le pudding. Je ne suis pas en mesure de tester la commande mais si tu dis que ça ne marche pas… 

Écrit par : ch21 15 May 2024, 21:23

Et en enregistrant cette séquence ?

Il me semble que c'etait possible aussi avec OS9.
Là tu chope ce qui se passe et tu l'intègres à ta sauce

Écrit par : JB7 16 May 2024, 01:05

oui, j'ai bien commencé comme ça.
J'ai tout simplement enregistré la séquence.
Mais l'action "OK" n'a pas été restituée dans le script.


Je remarque par contre que si "click button" ne passe pas à la compilation, "click at" et "click on" sont acceptés.
Pour utiliser "click at", il me faut les coordonnées du bouton dans la fenêtre et si "click on" est bien l'ancienne version de "click button", alors il me reste à trouver le moyen de lui désigner correctement le nom du bouton.

Mais là encore, je trouve des solutions pour faire ça avec OSX (UIElementInspector, ). Sur OS9, je ne trouve rien.

Écrit par : baron 16 May 2024, 14:05

Peut-être :

Code
click on "OK"
Ou :
Code
click on button "OK"


Écrit par : baron 16 May 2024, 16:41

Quelques suggestions de la part d'un membre discret :

Citation (Zeltron54)
Bonjour, Baron

Je ne me souviens plus très bien des commandes disponibles sur os 9 !

Je tenterais
Code
Tell application "system events"
tell process "Nom de l'appli"

keycode 36  ou 76

end tell
end tell


ou peut être en lieu et place de (tell process "Nom de l'appli") essayer avec (tell front window)

Je n'ai pas de possibilité d'essayer mac os 9...

Désolé de ne pas pouvoir aider plus.

P.S.
J'ai oublié,

essayer aussi

après le
Code
tell front window


Code
return

ou
Code
keystroke return

ou
Code
click button "OK"


A vérifier si dans le dictionnaire d'applescript pour os 9 il existe bien le (system events) ou éventuellement sous un autre nom !

Écrit par : JB7 17 May 2024, 02:08

Alors déjà, que Zeltron54 soit remercié pour avoir écrit « j’ai oublié ».
Ça me donne espoir, car j’en venais à douter que mon problème ait une solution.
Je peux continuer à chercher en me disant que la solution existe et qu’elle est probablement toute simple…


Je note aussi cette remarque : « A vérifier si dans le dictionnaire d'applescript pour os 9 il existe bien le (system events) ou éventuellement sous un autre nom ! »
J’ai cherché pendant des heures une réponse à cette question. Sur mon système rien ne s’appelle « system event » et j’ai cherché dans tout ce qui semble scriptable en vain. Sur internet, je n’ai pas trouvé ce qui pouvait remplacer « system event » sur OS9.
J’ai eu espoir avec le dictionnaire du finder, mais je ne comprend pas grand chose à la mine d’informations qu’il contient. En tout cas, pas de click, return ou keystroke...
Les exemples de l'aide applescript ne traitent pas non plus la question...


J’ai simplifié le problème pour être certain de ne pas être pollué par mon appli.
Je test les solutions sur une boite de dialogue basique :

Lorsque je teste

display dialog "Hello" buttons {"Cancel", "OK"} default button "OK"
tell front window
return
end tell

La boite de dialogue s’affiche et attend que l’utilisateur la valide.
Intuitivement, ce n’est pas surprenant… comment dire au script de lire la ligne suivante avant que la boite de dialogue n’ait été franchie ?

Écrit par : Zeltron54 17 May 2024, 06:46

Bonjour, JB7

Pour reprendre ton exemple, afin que le programme continu il faut ajouter : giving up after délai
ce qui donne pour un délai d'une seconde.

Code
display dialog "Hello" buttons {"Cancel", "OK"} default button "OK" giving up after 1
tell front window
    return
end tell


Mais je ne sais pas s'il valide le bouton sélectionné

Par contre aucune idée si cette fonction existait sur OS 9
Bon courage.

Écrit par : JB7 17 May 2024, 12:55

Je ne sais pas si en faisant ainsi le bouton OK est validé, mais l'instruction "return" n'est pas opérante puisque la boite de dialogue s'est en fait auto-validée avant que la ligne return soit atteinte.
Quoi qu'il en soit, ce n'est pas transposable à mon problème. J'ai essayé au cas où, mais "giving up after" ne peut pas être ajouté à mon instruction d'import.

Écrit par : Zeltron54 17 May 2024, 13:19

Alors, désolé
Ne pouvant pas tester (pas de mac sous os9), je ne sais même pas si cette fonction était disponible sous cet OS.

Peut être qu'un autre membre du forum pourra t'aider, je pense entre autre à PBell ...

Écrit par : baron 17 May 2024, 16:01

PBell m'a dit que lui non plus n'avait plus assez de souvenirs de Mac OS9, ni de machine tournant avec… sad.gif

Écrit par : Zeltron54 17 May 2024, 16:38

Je pense que JB7 va être contraint d'abandonner l'idée de vouloir valider cette demande et chercher une solution pour éviter qu'elle apparaisse.
Voir dans le dictionnaire de l'appli, si lors de l'appel d' import, en précisant le fichier à importer, si on peut éviter cette demande de validation.

Mais utiliser de nos jour OS 9, qui à plus de 25 ans, est-ce bien raisonnable ? et n'existe t'il pas un logiciel sous mac OS X qui ferait le job ?

Bon courage .

Écrit par : ch21 17 May 2024, 20:20

Citation (JB7 @ 17 May 2024, 03:08) *
Lorsque je teste
display dialog "Hello" buttons {"Cancel", "OK"} default button "OK"
tell front window
return
end tell

La boite de dialogue s’affiche et attend que l’utilisateur la valide.
Intuitivement, ce n’est pas surprenant… comment dire au script de lire la ligne suivante avant que la boite de dialogue n’ait été franchie ?

Et "enter" au lieu de "return" ?

Écrit par : JB7 18 May 2024, 00:51

il me semble que enter est plus juste que return parce que j'ai vu par ailleurs que return sert à autre chose (retourner un résultat).

Je veux dire que la ligne de script enter n'est lue que après validation manuelle de la boite de dialogue.

il manque surement une instruction...

Écrit par : ch21 19 May 2024, 21:12

Je pense plutôt que c'est la demande qui attend la confirmation.

Il faudrait pouvoir reformuler le
"display dialog "Hello" buttons {"Cancel", "OK"} default button "OK" giving up after 1" qui demande cette confirmation

Écrit par : JB7 21 May 2024, 15:22

Tu as raison, ça marche.
Le Giving up ne renvoie aucun résultat, mais ce n'est pas grave.
La solution (c'est pas de moi, j'ai trouvé sur la toile en cherchant "giving up") consiste à exploiter l'information du non retour de résultat par un test pour décréter le résultat.
Ça donne :

display dialog "Hello" buttons {"Cancel", "OK"} default button 2 giving up after 3
if the button returned of the result is not "Cancel" then
return "OK"
else
return "Cancel"
end if


Et ça marche sur OS9

Malheureusement pour moi, giving up marche ici en tant que complément de display dialog.
Mais dans mon cas réel, je n'écrit pas moi-même la boite de dialogue.
Je ne peux donc pas utiliser cette solution.

Donc bon tuyau, mais qui ne me sauve pas le match.

Écrit par : ch21 21 May 2024, 18:37

Dans :

Code
tell application "LimeLight_P"
activate
import file aFile to file outfile
end tell


Tu ne peux pas rajouter un

Code
enter
genre
Code
import file aFile to file outfile
Enter
end tell


Ou un truc du genre ?

Ou alors faire un truc avec HyperCard, c'était vachement plus simple et il y avait beaucoup d'exemples

Écrit par : JB7 22 May 2024, 00:59

J'ai essayé les trucs du genre.
Pour résumer, tant que la boite de dialogue n'est pas validée manuellement, la ligne suivante dans le script ne s'opère pas.
Excepté en effet en utilisant giving up, mais ça ne vaut que si le script créée la boite de dialogue.

Ton conseil d'essayer avec hypercard... pourquoi pas vu mon incompétence en applescript.
En fait, je ne connais d'hypercard que le nom (une démo vue quand c'était nouveau !), mais si c'est beaucoup plus simple, je peux être gagnant.

De tes souvenirs, l'ensemble de mes taches, c'est
- j'indique un dossier
- pour chaque fichier contenu dans ce dossier, limelight importe ce fichier (en validant au passage la touche "ok" qui est la touche par défaut) et enregistre le résultat. Sans aucune intervention utilisateur.

Ça ne va pas chercher plus loin, ça te semble dans les corde d'hypercard ?

Écrit par : ch21 22 May 2024, 20:58

HyperCard était très puissant, avec ou sans AppleScript

Le seul souci sera de retrouver tous les cours de ??? je ne me souviens pas de son nom.
Je sais que c'était le frère ou le beau frère d'une nana que je connaissait et qu'il était établi à Longvic à côté de Dijon

Je dois avoir ça sur des CD de sauvegarde, mais il faut lancer un OS9 pour retrouver le programme de gestion des sauvegardes…

Bref, peut être à partir d'octobre où je devrais avoir un peu plus de temps tongue.gif

Écrit par : baron 23 May 2024, 13:23

Citation (ch21 @ 22 May 2024, 20:58) *
Le seul souci sera de retrouver tous les cours de ??? je ne me souviens pas de son nom.
Eric Chatonet ? († 2009)

Écrit par : ch21 23 May 2024, 20:45

Citation (baron @ 23 May 2024, 14:23) *
Citation (ch21 @ 22 May 2024, 20:58) *
Le seul souci sera de retrouver tous les cours de ??? je ne me souviens pas de son nom.
Eric Chatonet ? († 2009)

Bravo @baron, c'est bien lui qui avait fait des tas de piles explicatives, dans Univers Mac ? Je ne sais plus… rolleyes.gif

Écrit par : JB7 24 May 2024, 09:07

Hypercard, en effet, c'est déroutant à quel point c'est ouvert.

Dans la même époque, il y a Resedit.
Je me disais que si j'arrive à trouver la boite de dialogue utilisée par Limelight, il y a peut-être moyen de lui coller un équivalent de 'giving up' ?

Bon, dans le manuel de resedit, cette possibilité ne saute pas aux yeux...

Écrit par : eteen 24 May 2024, 11:38

Bonjour,

Peut être une solution possible ici.

https://apple.stackexchange.com/questions/328673/applescript-how-to-identify-buttons-and-press-them

Écrit par : ch21 25 May 2024, 10:03

a défaut des piles d'Eric Chatonnet, j'ai retrouvé quelques piles explicatives : https://www.myqnapcloud.com/smartshare/777h5i974l6p7024v3931b17_6KEXQHq

Écrit par : JB7 26 May 2024, 01:55

Bonjour,

@eten, la transposition sur OS9 privé de System Events coupe l'herbe sous le pied à cette solution.
Mais je vais essayer de la faire fonctionner sur un système plus récent, ça m'aidera peut-être à comprendre.

@ch21, je télécharge et je vais essayer.

merci !

Écrit par : ch21 26 May 2024, 17:21

Bon, avec ce WE pourri j'ai cherché un peu dans mes archives.
Heureusement que mon Starmax fonctionne toujours, TriCatalog plante SheepShaver !

Bref, j'ai trouvé le sommaire des piles d'Eric Chatonnet et je n'ai rien trouvé qui puisse aider.

En revanche j'ai aussi retrouvé les guides applescript de l'époque.
Ca pourra peut être t'aider ?
https://www.myqnapcloud.com/smartshare/777h5i974l6p7024v3931b17_6kU32Oh

Écrit par : JB7 27 May 2024, 09:08

Alors...

Hypercard, ce qui est super, c'est que une fois qu'on se familiarise avec la navigation par piles et qu'on contrôle ses réflexes d'usage de la souris, on découvre rapidement les infos de base sur les scripts. Sinon, a moins que j'ai raté quelque chose, c'est uniquement la partie script d'hypercard que qui me serait utile, et c'est juste une version primitive d'applescript, non ?
En tout cas, il y a une version qui m'a semblé assez complète sur
https://www.macintoshrepository.org/2632-hypercard-2-4

J'ai chargé la doc complète applescript.
Très utile, largement supérieure à ce que j'avais récupéré.

J'ai beaucoup transpiré...

J'ai déjà songé à des plans B pour me passer de la solution, mais c'est tellement agaçant d'voir le sentiment d'en être à trois lignes près !

Maintenant, mon inquiétude a changé de forme.
Mon bout de script s'écrit :
tell application "LimeLight_P"
ignoring application responses
import file "Unix:_atelier:Xiaochuidong.Tab" to file "MacOS9:Desktop Folder:a_01"
end ignoring
close
end tell

(edité pour élaguer le château de cartes sans le faire tomber)

Et il donne des résultats surprenants.
La question de la touche return ou du click est résolue !, c'est déjà ça.
Je ne sais toujours pas faire de return ou de click là où il faut, mais je sais passer le dialogue d’importation sans avoir à le faire (une chance, les options par défaut sont celles qu'il me faut).

Par contre, l'import réalise des prouesses que je ne sais pas faire manuellement: importer en effaçant les données présentes et, vraiment plus surprenant, il a réussit à importer sans effacer un très grand nombre de fichiers sans que je n'ai changé quoi que ce soit au script (et en un temps éclair) !
Donc problème résolu (encore merci), mais je ne suis pas sortis du bois car si je script, c'est pour palier aux erreurs humaines... il faut donc aussi que je sache ce qui se passe !
laugh.gif


En tout cas merci

Écrit par : ch21 27 May 2024, 11:32

Bravo, ça fait plaisir !!! cool.gif

Maintenant que tu en es là, tu peux aller faire un tour dans le forum spécialisé pour tes interrogations https://forum.macbidouille.com/index.php?showforum=39

Écrit par : JB7 29 May 2024, 08:57

biggrin.gif
Je suis quasiment arrivé à mon résultat final !
oui, plusieurs jour pour trouver ceci : set x to x as alias
qui était nécessaire dans mon cas pour faire marcher dans une boucle ce qui marchait unitairement.

Pour ceux qui tomberaient sur ce fil et seraient aussi débutants que moi.
Mes conclusions :
- les causes de mon problème n'avait strictement rien à voir avec ma version de systeme et l'absence de system event.
(Les instructions en click, keycode, return etc sons simplement inutiles pour passer outre une boite de dialogue.)
- lors de mes essais, j'ai perdu beaucoup de temps à chercher à résoudre des problèmes inexistants, comme typiquement une boite de dialogue non fermée cachée derrière un farta de fenêtres inutiles.
-il n'y a pratiquement pas de chance qu'un problème soit insoluble ou non contournable avec ce qui est présent dans le guide.

Donc le titre que j'avais donné à mon fil avait tout faux !

Écrit par : ch21 29 May 2024, 20:14

Tu parles de quel guide ?

Écrit par : JB7 30 May 2024, 23:51

Le guide applescript que tu as mis en ligne ici
https://forum.macbidouille.com/index.php?showtopic=426778&view=findpost&p=4450363

Écrit par : ch21 31 May 2024, 11:42

Ah, ben content qu'il puisse encore servir à quelqu'un ce guide cool.gif

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)