ça fait chié, j'avais fais un bon tuto.
Alors on reprend.
Vous êtes fan d'autoit, et vous être en train de passé au langage C mais vous vous demmander bien ou est passer votre fonction pixelsearch ?
Réponse : à ma connaissance, celle-ci n'existe pas.
Oula, j'imagine déjà vos têtes : "trahison ! comment vais-je faire ???"
Heureusement pour vous, Lorrio est là et vous a mâché le travail en vous faisant une superbe fonction !
Voici sont protocol : void pixelsearch(int *x , int *y , int hx , int hy , int bx , int by, char txtt[7])
Oula, c'est bien beau tout ça, mais comment que je m'en sert moi ?
Bon, pour faire simple, je fais cela à travert un exemple :
main()
{
int x,y;
system("pause");
pixelsearch(&x , &y , 0 , 0 , 1024 , 768, "FFC0FF");
SetCursorPos(x,y);
system("pause");
}
1.
On déclare 2 variables de type int (je trouve que c'est bien de mettre x et y car cela correspond au coordonnées cartésiennes).
On envoi l'adresse de ces 2 variables à la fonction afin que celle-ci puisse les modifier. Comment envoyer une adresse ? Placer un & devant.
2.
On envoi la zone de recherche : coordonnée cartésienne du début de la recherche (soit en haut à gauche, ici (0;0) soit le bord haut gauche de notre écran) puis les coordonnée de la fin. (vous noterais que je me suis planté car si mon écran fait 1024par768 et que je commence par (0,0), je devrais finir par (1023,767)
3.
Envoyer le code couleur hexadécimal.
Ouai, j'lai bien ta fonction, mais moi, je veux pouvoir l'adapter aux écrans donc à l'aide de variables.
Et bien c'est possible, regardez ceci :
- Code: Tout sélectionner
main()
{
int x,y;
int hautX, hautY;
hautX = 234;
hautY = 214;
char color[7]="FFC0FF\0";
system("pause");
pixelsearch(&x , &y , hautX , hautY , hautX+800 , hautY+500 , color);
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
system("pause");
}
Bah voila, dois-je vraiment détailler ce bout de code ?
Je pense que si vous faite un minimum d'effort, vous comprendrez.
Juste ceci :
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
On place la souris sur le x et y que la fonction aura modifié et l'on fait un clic gauche.
ATTENTION :
Vous n'avez pas le droit de faire ça :
char color[7];
color[7]="FFC0FF\0";
Et pourquoi ? Parce que !
Essayez, vous verrez.
Oui, mais alors, je ne peux pas changer la couleur cherchée ?
Bah si : comme ceci : strcat(color,"FFC0FF\0"); en ajoutant #include <string.h>
strcat copie une chaine dans une autre, cherchez un peu, j'vais pas tout vous expliquer.
Pourquoi \0 ? bah, parce que toutes les chaines doivent se finir par \0.
Pourquoi 7 alors que en tout, ça fait 6 lettres + le \ et le 0, ça fait 8. Parce que \0 ne compte que pour une seule lettre.
Voila, ce petit tuto est terminé.
PS : si le pixel cherché n'est pas trouvé, x et y prennent la valeur de -1;
PS2 : pour pouvoir compiller, il vous faut ajouter la librairie gdi32 dans les options du projet.
Sous dev-cpp : Projet/Option du projet/Paramet.../ Ajouter ../../../../../../Dev-Cpp/lib/libgdi32.a dans l'éditeur de lien
Voila voila
Si vous voulez que je vous explique en détail la fonction, dites le moi.
- Code: Tout sélectionner
void pixelsearch(int *x , int *y , int hx , int hy , int bx , int by, char txtt[7])
{
HDC dc = GetDC(NULL);
COLORREF pix;
int R,G,B;
int RR,GG,BB;
int i,j;
char txt[7];
strncpy(txt,txtt,6);
*x=-1;
*y=-1;
for(i=0 ; i<6 ; i++)
{
txt[i]-=48;
if(txt[i]>10)
txt[i]-=7;
}
RR=txt[0]*16+txt[1];
GG=txt[2]*16+txt[3];
BB=txt[4]*16+txt[5];
for(j=hy ; j <= by ; j++)
{
for(i=hx ; i<= bx ; i++)
{
pix = GetPixel(dc, i, j);
R = GetRValue(pix);
G = GetGValue(pix);
B = GetBValue(pix);
if ( (R==RR) && (G==GG) && (B==BB) )
{
*x = i;
*y = j;
j = by+1;
i = bx+1;
}
}
}
ReleaseDC(NULL, dc);
}