Page 1 sur 1
[R] Pixelgetcolor et programme
Posté : mar. 08 juil. 2008 18:09
par hck
Salutations
J'ai réalisé un court programme pour facilité la recherche de pixel dans mes futur script,
pour cela il se base sur trois pixel proche du curseur,
Voilà mon code :
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\..\..\..\300_Icones\Dossiers\11.ico
#AutoIt3Wrapper_outfile=..\..\Desktop\Pixou.exe
#AutoIt3Wrapper_Compression=0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Opt("WinWaitDelay", 100)
Opt("WinTitleMatchMode", 4)
Opt("WinDetectHiddenText", 1)
Opt("MouseCoordMode", 0)
Opt("MouseCoordMode", 0)
HotKeySet("{F2}", "com")
HotKeySet("{ESC}", "quit")
HotKeySet("{PAUSE}", "Pause")
dim $pos[2],$Paused = 0, $pix1, $pix2, $pix0,$x,$y
#include <GUIConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Utilitaire", 334, 230, 193, 125)
$Label1 = GUICtrlCreateLabel("Utilitaire pour faire une recherche de pixel rapide et précise sous Autoit", 0, 0, 335, 17)
$Label2 = GUICtrlCreateLabel("Créé en association avec Bender, codé par Hck.", 40, 16, 235, 17)
$Label3 = GUICtrlCreateLabel("Placez votre souris sur l'objet à detecter, puis appuyez sur F2", 24, 48, 291, 17)
$Code = GUICtrlCreateEdit("", 16, 64, 305, 150)
GUICtrlSetData(-1, "Code")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
func com()
$pos = MouseGetPos()
$x = $pos[0]
$y = $pos[1]
MouseMove(0,0,1)
$pix0 = PixelGetColor($x,$y)
$pix0 = hex($pix0,6)
$pix1 = PixelGetColor($x + 1,$y)
$pix1 = hex($pix1)
$pix2 = PixelGetColor($x,$y + 1)
$pix2 = hex($pix2)
MouseMove($pos[0],$pos[1],1)
msgbox(0,"",$pix0 & $pix1 & $pix2)
GUICtrlSetData($code,'while 1' & @CRLF & '$coord = PixelSearch ( $x , $y , $x2 , $y2 , 0x' & $pix0 & ')' & @CRLF & ' if not @error then' & @CRLF & ' if Hex(pixelgetcolor($coord[0]+1, $coord[1] )) = "' & $pix1 & '" then' & @CRLF & ' if Hex(pixelgetcolor($coord[0], $coord[1] +1)) = "' & $pix2 & '" then' & @CRLF & ' exitloop' & @CRLF & ' endif' & @CRLF & ' endif' & @CRLF & ' endif' & @CRLF & 'WEnd')
endfunc
While 1
Sleep(50)
WEnd
Func quit()
Exit
EndFunc ;==>quit
Func Pause() ; la pause
TrayTip("Clear TIP", "", 0)
$Paused = Not $Paused
If $Paused Then
TrayTip("Pause !", "Pause ", 1, 1)
While $Paused
Sleep(100)
WEnd
Else
TrayTip("plus pause !", "plus Pause", 1, 1)
EndIf
EndFunc ;==>Pause
Le soucis est que les couleurs ne sont pas juste, pourriez vous me dire ou j'ai eu faux ?
Je galère pour trouver ça, pourtant mon script est "logique", et je ne trouve pas de faute
Autre soucis, il est incompilable, détécté comme trojan par avast :/
Re: [..] Pixelgetcolor et programme
Posté : mer. 09 juil. 2008 21:44
par timmalos
Le soucis est que les couleurs ne sont pas juste
Peux tu expliquer le problème?
Re: [..] Pixelgetcolor et programme
Posté : mer. 09 juil. 2008 21:51
par Tlem
Pour le problème de détection par Avast, ajoutez dans les directives de compilation la non utilisation de la compression UPX, et éventuellement selon votre version, la non utilisation du mode ANSI.
Si vous utilisez Scite4Autoit pour compiler, ajoutez ceci dans votre script :
Pour le problème des couleurs, je dirais pareil que timmalos ...
Je n'ai pas tout compris non plus !
Re: [..] Pixelgetcolor et programme
Posté : jeu. 10 juil. 2008 00:28
par hck
Merci bien, pour la couleur c'est simple, faites le teste, ouvrez window info, ouvrez mon script, placez votre souris sur un point précis, appuyez sur F2, la première couleur du scripte ne correspond pas a celle de window info !
d'où viendrais le problème ?
Re: [..] Pixelgetcolor et programme
Posté : jeu. 10 juil. 2008 01:59
par Tlem
Ajoutez MouseClick("left") au début de votre fonction 'Com'.
Re: [..] Pixelgetcolor et programme
Posté : jeu. 10 juil. 2008 03:22
par hck
Rien y fait, les couleurs ne sont toujours pas bonne

Re: [..] Pixelgetcolor et programme
Posté : jeu. 10 juil. 2008 08:23
par Tlem
Ceci fonctionne chez moi :
Code : Tout sélectionner
func com()
MouseClick("left")
$pos = MouseGetPos()
$x = $pos[0]
$y = $pos[1]
;MouseMove(0,0,1)
$pix0 = PixelGetColor($x,$y)
msgbox(0,"",$pix0)
$pix0 = hex($pix0,6)
$pix1 = PixelGetColor($x + 1,$y)
$pix1 = hex($pix1)
$pix2 = PixelGetColor($x,$y + 1)
$pix2 = hex($pix2)
MouseMove($pos[0],$pos[1],1)
msgbox(0,"",$pix0 & " " & $pix1 & " " & $pix2)
GUICtrlSetData($code,'while 1' & @CRLF & '$coord = PixelSearch ( $x , $y , $x2 , $y2 , 0x' & $pix0 & ')' & @CRLF & ' if not @error then' & @CRLF & ' if Hex(pixelgetcolor($coord[0]+1, $coord[1] )) = "' & $pix1 & '" then' & @CRLF & ' if Hex(pixelgetcolor($coord[0], $coord[1] +1)) = "' & $pix2 & '" then' & @CRLF & ' exitloop' & @CRLF & ' endif' & @CRLF & ' endif' & @CRLF & ' endif' & @CRLF & 'WEnd')
endfunc
Re: [..] Pixelgetcolor et programme
Posté : jeu. 10 juil. 2008 11:28
par hck
Code : Tout sélectionner
func com()
MouseClick("left")
$pos = MouseGetPos()
$x = $pos[0]
$y = $pos[1]
;MouseMove(0,0,1)
$pix0 = PixelGetColor($x,$y)
$pix0 = hex($pix0,6)
msgbox(0,"",$pix0)
$pix1 = PixelGetColor($x + 1,$y)
$pix1 = hex($pix1)
$pix2 = PixelGetColor($x,$y + 1)
$pix2 = hex($pix2)
MouseMove($pos[0],$pos[1],1)
msgbox(0,"",$pix0 & " " & $pix1 & " " & $pix2)
GUICtrlSetData($code,'while 1' & @CRLF & '$coord = PixelSearch ( $x , $y , $x2 , $y2 , 0x' & $pix0 & ')' & @CRLF & ' if not @error then' & @CRLF & ' if Hex(pixelgetcolor($coord[0]+1, $coord[1] )) = "' & $pix1 & '" then' & @CRLF & ' if Hex(pixelgetcolor($coord[0], $coord[1] +1)) = "' & $pix2 & '" then' & @CRLF & ' exitloop' & @CRLF & ' endif' & @CRLF & ' endif' & @CRLF & ' endif' & @CRLF & 'WEnd')
endfunc
En simplement bougeant la msg box, je n'obtient pas le même résultat, je doute que mon code soit faux, c'est moi qui ne comprend pas, Window Info ne donne pas la couleur en hexa ?
Soit dans mon exemple
La couleur dans la msgbox ne devrait pas être 00324C ?
Merci de votre aide, je pense que je nage un peu là

Re: [..] Pixelgetcolor et programme
Posté : jeu. 10 juil. 2008 11:35
par jbnh
Attention, une règle du forum a été ajoutée!
Si ca peut aider =>
Code : Tout sélectionner
$var = PixelGetColor( 10 , 100 )
MsgBox(0,"The hex color is", Hex($var, 6))
pour avoir la couleur hex.
Re: [..] Pixelgetcolor et programme
Posté : jeu. 10 juil. 2008 14:37
par hck
désolé pour les règles, pour mon problème je recommence mon script, on verra ce que ça donne, car je n'arrive pas a trouver le problème.
Un autre screen pour me faire comprendre :
http://img230.imageshack.us/img230/7/screenim4.jpg
Avec le code que j'ai utilisé présent sur le screen :
► Afficher le texte
Code : Tout sélectionner
func com()
$pos = MouseGetPos()
$pix0 = PixelGetColor($pos[0],$pos[1])
traytip("",hex($pix0,6),0)
$pix1 = PixelGetColor($pos[0] + 1,$pos[1])
$pix2 = PixelGetColor($pos[0],$pos[1] + 1)
MouseMove($pos[0],$pos[1],1)
GUICtrlSetData($code,'while 1' & @CRLF & '$coord = PixelSearch ( $x , $y , $x2 , $y2 , 0x' & hex($pix0,6) & ')' & @CRLF & ' if not @error then' & @CRLF & ' if Hex(pixelgetcolor($coord[0]+1, $coord[1] )) = "00' & hex($pix1,6) & '" then' & @CRLF & ' if Hex(pixelgetcolor($coord[0], $coord[1] +1)) = "00' & hex($pix2,6) & '" then' & @CRLF & ' exitloop' & @CRLF & ' endif' & @CRLF & ' endif' & @CRLF & ' endif' & @CRLF & 'WEnd')
endfunc
Re: [..] Pixelgetcolor et programme
Posté : jeu. 10 juil. 2008 15:53
par Tlem
Je viens de faire les essais avec votre code (Celui du premier post), et je suis tombé sur sur le même problème que vous !!!
J'ai trouvé cela étrange, et je me suis dit ... Mais quels sont les coordonnées capturées par la fonction
Com() ???
Petite modification du script avec ceci :
et là ... rhhhooooo mais les coordonnées ne sont pas bonne !!!
Alors, re-lecture du code, et là juste au niveau des fonctions
Opt() je vois ceci :
Donc petite transformation en
et là, nickel chrome chaque couleur correspond aux coordonnées prévues.

Re: [..] Pixelgetcolor et programme
Posté : jeu. 10 juil. 2008 16:42
par hck
Merci bien alors, je ne sais même pas pourquoi j'ai mis ça :]