[R] Pixel get color et fenêtre active

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Oxygene31
Niveau 2
Niveau 2
Messages : 26
Enregistré le : sam. 18 avr. 2009 16:36
Status : Hors ligne

[R] Pixel get color et fenêtre active

#1

Message par Oxygene31 »

Salut à tous !!
Voila je vous expose mon problème : Je voilais faire un petit script permettant de reconnaitre une couleur dans une fentre et si cette couleur change faire une action.

la taille de la fenêtre fait 445-488 (merci autoit windows info :) ) et elle est situé dans le coin en haut à gauche.

Code : Tout sélectionner

fonction WinWait(";fenetre","") 

;cordonnées 50% 
$cord50hpx=221
$cord50hpy=428 


;couleur noire
$noire=0x6E96FF

;couleur bleu
$rougerecharge=0x5C657E

func cliquer50()

    while 1
        $color50 = PixelGetColor($cord50hpx,$cord50hpy)
        If ($color50) = $noire then exitloop
        If Not ($color50) Then continueloop
    wend

        MouseClick("left",$cord50hpx,$cord50hpy)
    
EndFunc 

while 1
choisir50()
WEnd
 


Si je laisse la fenêtre en haut à gauche cela marche . Par contre si je bouge ma fenetre ça ne marche plus car pixelget color se répère par rapport à l'écran et non par rapport a la fenêtre active. Quand je déplace la fenêtre il ne trouve plus la couleur. Comment dois j faire ??
Modifié en dernier par Oxygene31 le dim. 06 déc. 2009 18:43, modifié 2 fois.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [...] pixel get color et fentre active

#2

Message par Iste »

effectuer le pixelgetcolor() au coordonée $cord50hpx + winxpos, $cord50hpy + winypos
et dire merci a WinGetPos() ^^
Signez ici
Oxygene31
Niveau 2
Niveau 2
Messages : 26
Enregistré le : sam. 18 avr. 2009 16:36
Status : Hors ligne

Re: [..] Pixel get color et fenêtre active

#3

Message par Oxygene31 »

Donc faudrait si je lis l'exemple faire

Code : Tout sélectionner

$size = WinGetPos("[active]")
$color50= PixelGetColor($cord50 +$size[0],$cord50 + $size[1])  
 
???
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Pixel get color et fenêtre active

#4

Message par Iste »

bééééh oui, enfin, je crois, enfin, je sais pas... faut essayer et si ca marche pas venir le dire ici !
Moi il peut pas tester le script donc bon..
Signez ici
Oxygene31
Niveau 2
Niveau 2
Messages : 26
Enregistré le : sam. 18 avr. 2009 16:36
Status : Hors ligne

Re: [..] Pixel get color et fenêtre active

#5

Message par Oxygene31 »

Après reflexion j'ai peut être une solution :

Soit les coordonnées d'un point Z
$x = "abcisse du point"
$y = "ordonnée du point"

Prenons la position de la fenetre active :

Code : Tout sélectionner

$win_fenetre_pos = wingetpos ( "Fenêtre" ) ; ou "wingetpos ( "[ACTIVE]" )
Divison les coordonnées du point Z par la largeur et la hauteur de la fenetre(toujours sur notre résolution )
On obtient un coefficient que l'on peut multiplier par la largeur de la nouvelle résolution de la fenetre active qui est enregistrée ici dans le array "$win_fenetre_pos" :

( ($x/1024)*$win_fenetre_pos[2], ($y/768)*$win_fenetre_pos[3] )

Ajoutons le point de depart de notre nouvelle fenetre active au cas ou ca position ne serais pas egal a ( 0; 0 ) :

( ($x/1024)*$win_fenetre_pos[2]+$win_fenetre_pos[0], ($y/768)*$win_fenetre_pos[3]+$win_fenetre_pos[1] )


Ce qui nous donnera :

Code : Tout sélectionner

$x = "abcisse du point"
$y = "ordonnée du point"

$win_fenetre_pos = Wingetpos ( "fenetre" )

PixelGetcolor( ($x/1024)*$win_fenetre_pos[2]+$win_fenetre_pos[0], ($y/768)*$win_fenetre_pos[3]+$win_fenetre_pos[1] )

Qu'en pensez vous ???
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Pixel get color et fenêtre active

#6

Message par Iste »

J'en pense Image

Code : Tout sélectionner

WinWait(";fenetre","") 

;cordonnées 50% 
$cord50hpx=221
$cord50hpy=428 
[color=#FF0000]$win_fenetre_pos = Wingetpos ( "fenetre" )
[/color]
;couleur noire
$noire=0x6E96FF

;couleur bleu
$rougerecharge=0x5C657E

func cliquer50()

    while 1
        $color50 = PixelGetColor([color=#FF0000]$win_fenetre_pos[0] + [/color]$cord50hpx,[color=#FF0000] $win_fenetre_pos[1] +[/color] $cord50hpy)
        If ($color50) = $noire then exitloop
        If Not ($color50) Then continueloop
    wend

        MouseClick("left",$cord50hpx,$cord50hpy)
    
EndFunc 

while 1
choisir50()
WEnd
Voila ton code, fonctionel, avec les 3 modifs que j'ai fais mise en rouge
Signez ici
Répondre