[R] Problème sur utilisation PixelSearch

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jjack76
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 11 nov. 2009 10:56
Localisation : Rouen
Status : Hors ligne

[R] Problème sur utilisation PixelSearch

#1

Message par jjack76 »

Bonjour,

Je suis nouvel utilisateur dea AutoIT (j'ai commencé il y a 3 jours). Mes premières impressions sont plutot bonne. ça me semble un super outil avec énormément de possibilité. Bravo aux développeurs.
Aujourd'hui je bloque sur l'utilisation de la fonction PixelSearch.
Extrait de mon script :

Code : Tout sélectionner

 
Opt("PixelCoordMode", 0) 
$coord = PixelSearch( 240, 400, 240, 540, 0xC1C204,$Handle1)
MouseMove($coord[0], $coord[1],50)
If Not @error Then
    MsgBox(0, "X and Y are:", $coord[0] & "," & $coord[1])
EndIf
 
J'utilise ce script sur une fenêtre Internet Exploreur. Quelque soit la couleur que je définis je récupère toujours les même coordonées (240,400). Et ce n'est pas la couleur du point ou je me retrouve (que je récupère avec AutoIt windows Info)
Je suppose que j'utilise mal cette fonction mais après recherche dans le forum je n'ai pas trouvé de réponse à mon problème (j'ai peut être mal chercher).
Est-ce que quelqu'un peut m'aider ?
Bonne journée
JJ
Modifié en dernier par jjack76 le jeu. 12 nov. 2009 23:25, modifié 2 fois.
vindiablo
Niveau 1
Niveau 1
Messages : 9
Enregistré le : lun. 14 janv. 2008 16:04
Status : Hors ligne

Re: problème sur utilisation PixelSearch

#2

Message par vindiablo »

Salut,

Tu aura un peut de mal a trouver de l'aide ici si tu n'utilise pas la balise CODE et si tu ne lis pas ceci http://www.autoitscript.fr/forum/viewto ... ?f=3&t=395

A plus tard.
jjack76
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 11 nov. 2009 10:56
Localisation : Rouen
Status : Hors ligne

Re: [..] Problème sur utilisation PixelSearch

#3

Message par jjack76 »

Re bonjour,

Voilà c'est corrigé, j'ai ajouté les balises (balise dans le sujet et balise code).
J'ai un peu honte de dire que je n'avait pas lu les règles d'écriture des messages, c'est maintenant chose faite. N'hésitez pas à me dire si j'ai encore raté quelque chose.

JJ
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Problème sur utilisation PixelSearch

#4

Message par guitarist »

Pourrait-tu mettre ton code en entier stp car des variables son affichés et on ne sait pas a quoi elle correspondent.
Merci

PS : Et puis c'est normal que tu ai des probleme puisque tu dis tjr de chercher au meme endroit
jjack76
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 11 nov. 2009 10:56
Localisation : Rouen
Status : Hors ligne

Re: [..] Problème sur utilisation PixelSearch

#5

Message par jjack76 »

voilà mon code complet en cours d'écriture. Tel qu'il est là mon script ne fonctionne pas correctement. Mon but pour l'instant est de tester le fonctionnement le PixelSearch.

Code : Tout sélectionner

 #include <IE.au3>
Opt("WinTitleMatchMode", 1)
; Prompt the user to run the script - use a Yes/No prompt (4 - see help file)
$answer = MsgBox(4, "Récupération actes", "Voulez vous lancer la récupération  Run?")


; Check the user's answer to the prompt (see the help file for MsgBox return values)
; If "No" was clicked (7) then exit the script
If $answer = 7 Then
    MsgBox(0, "AutoIt", "OK.  Bye!")
    Exit
EndIf
;  mettre le nombre de page à récupérer  ex For $I=1 to 70 (si 70 pages à récuperer)  ex2  For $I=10 to 70  (pour commencer à la page 10 jusqu'à la page 70)
For $I=1 to 31
;$I=2
; Run the calculator
;Run("C:\Program Files\Internet Explorer\iexplore.exe http://www.archinoe.net/cg14/registre.php")

_IECreate ("www.archinoe.net/cg14/registre.php", 0, 1, 1)


; Wait for the calulator become active - it is titled "Calculator" on English systems
WinWaitActive("Archives départementales du Calvados")
WinSetState ( "Archives départementales du Calvados - Microsoft Internet Explorer provided by Sogeti Regions", "", @SW_MAXIMIZE )
WinSetTitle("Archives départementales du Calvados", "", "Fenêtre 1 - Archives départementales du Calvados")
$Handle1 = WinGetHandle("Fenêtre 1")
;MsgBox(0, "AutoIt", $Handle1)
;Sleep(3000)
MouseClick ( "left",324,341)
Send("CARTIGNY-TESSON")
Sleep(2000)
MouseClick ( "left",366,369)
; Recherche de la ligne "rechercher dans la liste grace à la couleur du bandeau
Opt("PixelCoordMode", 0) 
$coord = PixelSearch( 240, 400, 240, 540, 0xC1C204,$Handle1)
MouseMove($coord[0], $coord[1],50)
If Not @error Then
    MsgBox(0, "X and Y are:", $coord[0] & "," & $coord[1])
EndIf

Exit
Sleep(3000)
;On clic dans la case à cocher Tous
MouseClick ( "left",326,702)
;On clic sur OK(
MouseClick ( "left",433,734)
Sleep(2000)
;On clic sur l'ascenseur n fois pour descendre la liste de n élélments  MouseClick("left",1020,650,n,0)
MouseClick ( "left",1020,650,2,0)
;On clic sur le neme élément de la liste ex ; MouseClick ( "left",600,370,1,0)
$text = WinGetClassList("Fenêtre 1", "")
MsgBox(0, "Text read was:", $text)
Exit
MouseClick ( "left",600,370,1,0)     ; 1er clic   2eme elemant
sleep(5000)
Exit
WinWaitActive("Archives départementales du Calvados","Terminé")

;Sleep(3000)
;WinSetTitle("Archives départementales du Calvados", "", "Fenêtre 2 - Archives départementales du Calvados")
;$Handle2 = WinGetHandle("Fenêtre 2")
;MsgBox(0, "AutoIt", $Handle2)


;WinWaitActive("Archives départementales du Calvados","Changer de sélection")
;$var = ControlGetText("Archives départementales du Calvados /5MIEC/1 PLACARD/BEAUMONT-EN-AUGE 1832-1862 - Microsoft Internet Explorer provided by Soge", "", "InternetToolbarHost1")
;MsgBox(0, "AutoIt", ")
Sleep(5000)
Send("+{home}")
Sleep(5000)
send($i)
send("{enter}")
WinWaitActive("Archives départementales du Calvados","Terminé")
WinSetTitle("Archives départementales du Calvados", "", "Fenêtre 2 - Archives départementales du Calvados")
$Handle2 = WinGetHandle("Fenêtre 2")
MouseClick ( "left",50,327)
WinWaitActive("Archives départementales du Calvados")
Sleep(2000)
send("{TAB}")
Sleep(2000)
send("{TAB}")
Sleep(2000)
send("{TAB}")
Sleep(2000)
send("{enter}")
WinWaitActive("http://www.archinoe.net/cg14/visualiseur")
$Handle3 = WinGetHandle("http://www.archinoe.net/cg14/visualiseur")
Opt("MouseCoordMode",0)
MouseClick ( "left",62,70)
$NomFichier = "PAGE"&$I
;MsgBox(0, "AutoIt",$NomFichier)
send($NomFichier)
send("{enter}")
WinClose($handle1)
WinClose($handle2)
WinClose($handle3)

Next
 

Tu dis : c'est normal que tu ai des probleme puisque tu dis tjr de chercher au meme endroit
Si j'ai bien compris le fonctionnement de PixelSearch, on cherche le 1er pixel d'une couleur donnée dans un rectangle.
Ex
PixelSearch( 240, 400, 250, 540, 0xC1C204) : recherche le 1er pixel de la couleur 0xC1C204 dans un rectangle commençant aux corrdonnées 240,400 et se terminant au coordonnées 250,540 (soit recherche sur environ 1400 pixels). Et bien à chaque fois le résultat retourné est 240, 400 (soit le 1er pixel testé et qui n'est pas de la couleur recherché.

JJ
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Problème sur utilisation PixelSearch

#6

Message par guitarist »

Code : Tout sélectionner

$coord = PixelSearch( 0, 0, 800, 800, 0xC1C204,$Handle1)

MouseMove($coord[0], $coord[1],50)
If Not @error Then
    MsgBox(0, "X and Y are:", $coord[0] & "," & $coord[1])
EndIf
A toi meme de le regler
jjack76
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 11 nov. 2009 10:56
Localisation : Rouen
Status : Hors ligne

Re: [..] Problème sur utilisation PixelSearch

#7

Message par jjack76 »

Je ne comprend pas bien ce que tu veux m'expliquer dans ta réponse.
De plus je viens de faire un script de test avec paint et là avec un seul pixel search, je retrouve bien la 1ere occurence du pixel avec la couleur donnée.
Il semblerait que je n'ai le problème qu'avec les fenêtre Internet Exploreur.
Je continue mes tests.

nouveau script de test avec paint

Code : Tout sélectionner

Opt("WinTitleMatchMode", 1)
Run("c:\windows\system32\mspaint.exe")
WinWaitActive("Sans titre")
WinSetState ( "Sans titre", "", @SW_MAXIMIZE )


Opt("PixelCoordMode", 1)
MouseClick ( "left",132,840)
MouseClick ( "left",14,212)
MouseClick ( "left",26,309)
MouseClickDrag("left", 220, 140, 380, 320)


$coord = PixelSearch( 100, 100, 400, 350, 0x000080)
;MouseMove($coord[0], $coorMouseClickDrag("left", 0, 200, 600, 700)
;$var = PixelGetColor( $coord[0] , $coord[1] )
;MsgBox(0,"The decmial color is", $var)
;MsgBox(0,"The hex color is", Hex($var, 6))

If Not @error Then
    MouseMove($coord[0], $coord[1],50)
    $var = PixelGetColor( $coord[0] , $coord[1] )
    MsgBox(0,"The decmial color is", $var,3)
    MsgBox(0,"The hex color is", Hex($var, 6),3)
    MsgBox(0, "X and Y are:", $coord[0] & "," & $coord[1],3)
else
    MsgBox(0,"erreur", @error)
EndIf

Exit
jjack76
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 11 nov. 2009 10:56
Localisation : Rouen
Status : Hors ligne

Re: [..] Problème sur utilisation PixelSearch

#8

Message par jjack76 »

Je viens de faire un nouveau test avec un fenêtre IE qui marche correctement.
Je pense avoir un piste sur mon problème.
Dans mon script de base je fait :
- Ouverture d'une page internet
- Dans cette page je saisi une données.
- La saisie de cette données entraine le décalage vers le bas d'une partie de l'image
- Quand je fais le PixelSearch il me donne à priori les coordonnées du pixel avec la couleur demandée telle qu'elle était avant le décalage vers le bas, ce qui ne correspond à rien dans l'état actuel de la fenêtre. Par contre AutoIT windows Info donne la bonne couleur.

Sauf erreur de ma part l'erreur vient de là, ce qui ne règle pas mon problème.

JJ
jjack76
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 11 nov. 2009 10:56
Localisation : Rouen
Status : Hors ligne

Re: [..] Problème sur utilisation PixelSearch

#9

Message par jjack76 »

Bonsoir à tous

J'ai réglé mon problème en utilisant la fonction Pixelchecksum (voir ci-dessous) à la place de la fonction PixelSearch. Je ne comprend pas pourquoi cela marche avec Pixelchecksum et pas avec PixelSearch, mais le résultat c'est que mon problème est réglé.

Code : Tout sélectionner


.../...
$checksum1 = PixelChecksum(420,310,427,315)
MouseClick ( "left",324,341)
Send($answer)
Sleep(2000)
MouseClick ( "left",366,369)
Sleep(3000)
;détermination de l'emplacement du bandeau "types d'actes"
$checksum2 = 0
$Coord1 = 350
$Coord2 = 563
$Coord3 = 357
$Coord4 = 568

While $checksum1 <> $checksum2
    $checksum2 = PixelChecksum($Coord1,$Coord2,$Coord3,$Coord4)
    $Coord2 = $Coord2 + 1
    $Coord4 = $Coord4 + 1
WEnd
.../...
 
Répondre