Aide sur loop d'identification de pixel

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Aide sur loop d'identification de pixel

Re: Aide sur loop d'identification de pixel

Post by Nanope » 28 Aug 2021, 12:51

Merci pour le tips, et mince en effet, l'image que j'avais mise s'était enlevée, je l'ai remise !
Est-ce que c'est plus clair avec le petit schéma ?

Re: Aide sur loop d'identification de pixel

Post by joedf » 26 Aug 2021, 14:13

Pour appuyer sur entrée et de le maintenir enfoncé (3s) tu peux faire ce ceci

Code: Select all

Send, {Enter Down}
Sleep, 3000
Send, {Enter Up}
Pour le reste, je suis pas certain de comprendre. Je pense qu'une image aiderais bien...

Aide sur loop d'identification de pixel

Post by Nanope » 26 Aug 2021, 14:05

Bonjour à tous,
Je cherche à automatiser une mécanique un peu pénible, qui consiste à appuyer sur une touche ou non, selon le message qui s'affiche. Ces messages sont des boites de dialogue ayant chacunes une dimension différente, donc je pensais créer une boucle qui réagit en fonction de la présence ou non du pixel de la box, et en fonction renvoi ou non le signal de la touche, mais je ne comprends pas comment faire ça.

La boucle complète est constituée de 4 messages, correspondant à 1 boucle imbriquée dans la seconde :
- Un premier message au démarrage de la séquence : Restez appuyé sur entrée (la plus grosse box)
-> Séquence de deux messages qui s'alternent de manière aléatoire, le nombre de répétitions va de 1 à 10
- Message A : Relachez entrée (2e box la plus grosse)
- Message B : Restez appuyé sur entrée (3e box la plus grosse)
- Lorsque la séquence est terminée, un dernier message apparaît : Relachez entrée (box la plus petite), la séquence recommence.

Les box de dialogue restent environ 3 à 4 secondes, et disparaissent pendant autant de temps avant. Seule la dernière boite peut apparaître alors que la boite précédente est affichée (position différente). La séquence peut mettre un peu plus de temps à se réinitialiser (jusqu'à 6-7 secondes). À noter que les 3 premières box se situent les unes sur les autres (je cible donc les pixels par "élimination" : si il n'y a pas les pixels de la 1e box, je cherche la 2nde, etc.) :
image.png
image.png (3.08 KiB) Viewed 1671 times
Il n'est nécessaire d'appuyer (ou relacher) entrée que pendant la fin de la boite de dialogue (je dirais la dernière seconde) et peut importe que la touche soit appuyée ou non quand il n'y a pas de box.
La boucle complète s'exécute entre 33 et 100 fois (70-80 en moyenne). Lorsque la boucle ne peut plus s'exécuter, un message apparaît.

Je pensais donc faire une boucle du style :
[Loop 1]
- Chercher le pixel de la box 1
- Lorsque trouvé, appuyer sur entrée pendant 3s (ou rester appuyé jusqu'à ordre contraire ?)
[Loop 2]
- Chercher le pixel de la box 2
- Si trouvé : Relacher entrée (ou ne rien faire si entrée déjà relaché ?)
- Si non trouvé : Chercher pixel de la box 3
- Appuyer sur la touche entrée (sera forcément trouvé si l'autre n'a pas été trouvé)
-> Répéter séquence jusqu'à ce que pixel de la box 4 soit trouvé
[Fin loop 2]
- Pixel box 4 trouvé : Relacher la touche entrée
- Attendre 5 secondes
- Stopper la boucle si message de fin apparaît, sinon recommencer.
[Fin loop 1]

J'ai essayé de traduire ça sur MacroCreator, mais je suis bloqué car je ne comprends pas comment mettre tout ça en place : je ne comprends pas comment gérer la touche entrée, ni comment faire la seconde boucle pour qu'elle "cherche" entre les 2 options possibles sans se bloquer. J'ai aussi essayer de créer un événement "finboucle" pour le moment où la 4e box apparaît, qui mettrais donc fin à la boucle, mais idem je ne sais pas comment faire.

Pour le moment ça donne ça :

Code: Select all

Loop, 3
{
    Loop
    {
        CoordMode, Pixel, Window
        PixelSearch, FoundX, FoundY, 1875, 32, 1886, 59, 0x2E5C73, 0, Fast RGB
        If ErrorLevel
        	Loop, 2
        		SoundBeep  <!-- Pour savoir si la boucle bug, vu qu'il est sensé trouver ces pixels à chaque début de séquence -->
    }
    Until ErrorLevel = 0
    If (ErrorLevel = 0)
    {
        Loop <!-- début de la boucle interne -->
        {
            Loop, 10 <!-- 1e partie de l'alternance entre les 2 possibilités, en principe un "if (trouve le 1er pixel)" -->
            {
                CoordMode, Pixel, Window
                PixelSearch, FoundX, FoundY, 1829, 17, 1837, 41, 0x2E5C73, 0, Fast RGB
                If ErrorLevel = 0
                	Click, %FoundX%, %FoundY%, 0
            } <!-- En principe ici un "else (trouve l'autre pixel)" (->
        }
        Until, finboucle <!-- Ce qui est sensé correspondre à la fin de la boucle interne -->
    }
}
J'espère que mon explication est compréhensible, sinon je pourrais toujours vous envoyer un gif de la séquence.

Merci par avance si vous pouvez me débloquer, sinon d'avoir pris le temps de lire jusque là ! :D

Top