Intervertir deux actions sur la même touche

Postez ici si vous avez des difficultés a comprendre une commande, ou a créer une macro.
Répondre
Apprenti-macroer
Messages : 2
Enregistré le : 11 avr. 2018, 11:09

Intervertir deux actions sur la même touche

Message par Apprenti-macroer » 11 avr. 2018, 11:58

Bonjour à tous,

D'abord je vous informe que je ne comprends pas toujours ce que je fais et j'y vais par tâtonnements. Justement, j'essaye d'apprendre via ces petits projets. :D
J'essaye de classifier mes infos que vous puissiez allez chercher facilement/rapidement ce dont vous avez besoin pour m'aider.

Le but final :
Pour ma première macro, j'aimerais ceci :
Que lorsque j'appuie sur une touche une 1ere fois (touche A), supermacro émule la frappe d'un texte (debut).
Puis lorsque j'appuie sur cette touche une 2eme fois (touche A), supermacro émule la frappe d'un autre texte (FIN).

Ce que j'ai essayé :

Variable [EVENT.ACTIVATE];[EVENT.ACTIVATE];Numerique;
Variable [EVENT.KEY];[EVENT.KEY];Alpha;
Variable <Var1>;;Alpha;
Calcul évolué [EVENT.ACTIVATE]=1
Label <EcouteA1>
Calcul évolué <Var1>=[EVENT.KEY]
Examine <Var1>;=;a;
Goto <ActionA1>
Goto <EcouteA1>
Label <ActionA1>
Calcul évolué [EVENT.ACTIVATE]=0
Type debut
Goto <EcouteA2>
Label <EcouteA2>
Pause 00:00:01
Calcul évolué <Var1>=[EVENT.KEY]
Examine <Var1>;=;a;
Goto <ActionA2>
Goto <EcouteA2>
Label <ActionA2>
Calcul évolué [EVENT.ACTIVATE]=0
Type fin

Résultat : quand je joue cette macro, si j'appuie sur la touche a, il m'écrit tout d'un coup : "adebutfin" (en repectant la pause entre "debut" et "fin").

Mon raisonnement erroné du problème :
J'avais mis cette pause pour que justement la nouvelle écoute de la touche "a" se fasse après une pause et par conséquent la seconde me permettait d'avoir relâché la touche. BIG FAIL. Il semblerait que l'écoute se fasse qu'une fois et au début. Je me suis dit ok, qu'à cela ne tienne. Je n'ai qu'a faire une première macro qui écoute "a" pour m'écrire "début", la fermer et appeler une seconde macro "a" pour "fin". Comme ça je force 2 écoutes séparées ! Ce que j'ai fait :

Macro1 :
Variable [EVENT.ACTIVATE];[EVENT.ACTIVATE];Numerique;
Variable [EVENT.KEY];[EVENT.KEY];Alpha;
Variable <Var1>;;Alpha;
Calcul évolué [EVENT.ACTIVATE]=1
Label <EcouteA1>
Calcul évolué <Var1>=[EVENT.KEY]
Examine <Var1>;=;a;
Goto <ActionA1>
Goto <EcouteA1>
Label <ActionA1>
Calcul évolué [EVENT.ACTIVATE]=0
Type debut
Pause 00:00:01
Execute C:\Users\Dridri\Desktop\Fin.mcr

Macro2:
Variable [EVENT.ACTIVATE];[EVENT.ACTIVATE];Numerique;
Variable [EVENT.KEY];[EVENT.KEY];Alpha;
Variable <Var1>;;Alpha;
Calcul évolué [EVENT.ACTIVATE]=1
Label <EcouteA1>
Calcul évolué <Var1>=[EVENT.KEY]
Examine <Var1>;=;a;
Goto <ActionA1>
Goto <EcouteA1>
Label <ActionA1>
Calcul évolué [EVENT.ACTIVATE]=0
Type FIN
Pause 00:00:04
Execute C:\Users\Dridri\Desktop\Debut.mcr

Résultat : quand je joue cette macro, si j'appuie sur la touche a, il m'écrit tout d'un coup : "debutfin" en boucle (en repectant les pauses entre "debut" et "fin").

Mon raisonnement erroné du problème : Bordel, comment la seconde macro peut réagir au fait que j'avais appuyé sur "a" pendant l’exécution de la première macro, alors qu'elle n'était même pas encore lancée et par conséquent n'écoutait pas "a" ! Grrrr ! Bon il semblerait qu'entre macro1 et macro2 il y ait de la transmission d'information...

Si une âme charitable veut bien corriger mon code ce serait déjà bien. Si elle veut bien m'expliquer comment voir les choses ce serait encore mieux.

Bonne journée !

Avatar du membre
Onissius
Messages : 744
Enregistré le : 11 avr. 2014, 22:47
Localisation : Lyon (France)
Contact :

Re: Intervertir deux actions sur la même touche

Message par Onissius » 12 avr. 2018, 18:10

Approche différent, tu écrit 1 ou 2 dans un fichier texte ou stocker dans une variable.
Quand tu presse A, ça lis le contenu du fichier et en fonction, ça lance une sous-macro ou une autre.
3 macros, tu les utilises toutes en même temps ? ou c'est 3 version d'une seul macro.

Je regarde tes macros....
J'ai découvert SM en 99, rapidement Adam m'a promu admin.
Posez vos questions aussi clairement que possible, sans fautes qui piquent les yeux et relisez vous.
Vérifiez sur mon DISCORD si je suis en ligne.

Apprenti-macroer
Messages : 2
Enregistré le : 11 avr. 2018, 11:09

Re: Intervertir deux actions sur la même touche

Message par Apprenti-macroer » 13 avr. 2018, 01:48

Coucou, onissius ! Merci pour ton aide et ta réactivité :)

J'ai créé une troisième macro avec une variable qui se modifiait par les sous macros, pour gérer tout ça comme tu me l'as conseillé. Au final, cela me faisait le même problème.
Mais grâce à ça j'ai appris pas mal de nouvelles choses (dont la transmission de valeur de variable entre macro) et j'ai mieux compris mon code.

Solution :
Bon j'ai réglé mon soucis. J'ai laissé l'event activate ouvert tout le temps et surtout j'ai coupé l'event key après chaque écoute+action. La valeur de l'event.key devait rester activée (par la touche a) ce qui explique que la macro exécutait tout, une fois la première touche (a) préssée. C'est logique en fait... Comme tout en informatique, faut juste la comprendre cette logique ^^
Je n'ai pas su "dire" que maintenant <Var1>;=(à rien) et qu'elle n'est plus égale à la touche (a). Pour qu'elle arrête d'être a et donc que ça ne lise pas toute ma macro. Si tu peux me dire comment on fait, et si ça aurait été une bonne solution, je veux suis preneur de cette info. Je ne me voyais pas dire que <Var1>;=0 puisque elle n'est pas une valeur numérique mais alpha... Et non plus mettre <Var1>;= . Parce que ne rien mettre, je ne suis pas sur que ça remplace le (a). Bon : le event.key a 0 a fonctionné alors... Pour l'instant, même sans cette info je suis sauvé :lol: ;)

Je suis donc repassé sur mon tout premier code et j'ai apporté ces modifications. J'ai préféré avoir 1 seule macro qui gère ça, plutôt que plusieurs qui interagissent entre elles pour faire au final le même taf. Je suppose que ça va plus vite et ça sollicite moins de ressources.

Voilà mon code, si tu veux y jeter un coup d'oeil et me dire si il est propre et pas trop "instable".

Variable [EVENT.ACTIVATE];[EVENT.ACTIVATE];Numerique;
Variable [EVENT.KEY];[EVENT.KEY];Alpha;
Variable <Var1>;;Alpha;
Calcul évolué [EVENT.ACTIVATE]=1
Label <EcouteA1>
Calcul évolué <Var1>=[EVENT.KEY]
Examine <Var1>;=;a;
Goto <ActionA1>
Goto <EcouteA1>
Label <ActionA1>
Type debut
Calcul évolué [EVENT.KEY]=0
Goto <EcouteA2>
Label <EcouteA2>
Calcul évolué <Var1>=[EVENT.KEY]
Examine <Var1>;=;a;
Goto <ActionA2>
Goto <EcouteA2>
Label <ActionA2>
Type fin
Calcul évolué [EVENT.KEY]=0
Goto <EcouteA1>


Ceci étant résolu, je continue à faire mon chemin et j'ai une nouvelles question. Et surement d'autres qui viendront. Dois-je les poster ici ou préfères-tu que j'ouvre un post à chaque question différente ?

Ma question pour l'instant serait :
- l'event.key semble lancer l'action sur le relâchement de la touche. J'aimerais savoir si il est possible d'écouter une touche et de lancer l'action quand on presse la touche !

Avatar du membre
Onissius
Messages : 744
Enregistré le : 11 avr. 2014, 22:47
Localisation : Lyon (France)
Contact :

Re: Intervertir deux actions sur la même touche

Message par Onissius » 14 avr. 2018, 20:02

Je ne suis pas programmeur, dans le sens ou je ne fait pas ça tout le temps et mes compétences y sont limité. Je suis seulement le plus vieux utilisateur/admin. Mais je reste un utilisateur basique de SM. Je vais essayer de te comprendre...
J'ai découvert SM en 99, rapidement Adam m'a promu admin.
Posez vos questions aussi clairement que possible, sans fautes qui piquent les yeux et relisez vous.
Vérifiez sur mon DISCORD si je suis en ligne.

Avatar du membre
Feitan
Site Admin
Messages : 301
Enregistré le : 11 avr. 2014, 15:15

Re: Intervertir deux actions sur la même touche

Message par Feitan » 17 avr. 2018, 19:58

Salut,

Il est plus pratique de faire un sujet par question. Ça limite au maximum le blabla entre la question et la découverte d'une solution.

Pour ta question sur l'event.key, donné une valeur numérique ne dérange pas puisque les variables alphanumériques gèrent aussi bien les lettres que les chiffres (tout comme le fait string ou char dans les langages de programmation plus usuels).
Pour l’événement au relâchement de la touche pour l'instant je n'ai pas de pistes. J'essaye de penser à regarder en rentrant ce soir et essaye de te tenir au courant.

Bonne journée

Avatar du membre
Onissius
Messages : 744
Enregistré le : 11 avr. 2014, 22:47
Localisation : Lyon (France)
Contact :

Re: Intervertir deux actions sur la même touche

Message par Onissius » 02 nov. 2018, 06:10

En ce moment j’essaie de comprendre ta macro, mais aussi comment faire une action quant on presse une touche...

Commentaire VARIABLES :
Variable [EVENT.ACTIVATE];[EVENT.ACTIVATE];Numerique;
Variable [EVENT.KEY];[EVENT.KEY];Alpha;
Variable <Var1>;;Alpha;
Calcul évolué [EVENT.ACTIVATE]=1
Commentaire ECOUTE A1
Label <EcouteA1>
Calcul évolué <Var1>=[EVENT.KEY]
Examine <Var1>;=;a;
Goto <ActionA1>
Goto <EcouteA1>
Commentaire ACTION A1
Label <ActionA1>
Type debut
Calcul évolué [EVENT.KEY]=0
Commentaire ECOUTE A2
Label <EcouteA2>
Calcul évolué <Var1>=[EVENT.KEY]
Examine <Var1>;=;a;
Goto <ActionA2>
Goto <EcouteA2>
Commentaire ACTION A2
Label <ActionA2>
Type fin
Calcul évolué [EVENT.KEY]=0
Goto <EcouteA1>

Effectivement, ça réagis seulement quant on relâche A.

La première fois, ça tape "debut" et la seconde fois "fin" et ça boucle. Là, j’essaie de trouver si il n'y a pas une autre variable système comme [EVENT.KEYPRESS], [EVENT.KEY.PRESS], [EVENT.KEYDOWN], [EVENT.KEY.DOWN] en Delphi ou un truc comme ça. Je cherche...
J'ai découvert SM en 99, rapidement Adam m'a promu admin.
Posez vos questions aussi clairement que possible, sans fautes qui piquent les yeux et relisez vous.
Vérifiez sur mon DISCORD si je suis en ligne.

Répondre