[C++]Simulation de clic impossible sur la fenêtre d'un programme

Fireflyy Messages postés 2 Date d'inscription samedi 1 février 2014 Statut Membre Dernière intervention 1 février 2014 - 1 févr. 2014 à 00:48
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 2 févr. 2014 à 17:07
Bonjour,
Depuis quelque temps j'ai décidé de me lancer dans la programmation d'un bot visant à récolter automatiquement des ressources dans Dofus.

Pour ça j'utilise la fonction :

HDC dc = GetDC(NULL);
COLORREF pix;

pix = GetPixel(dc, px.x, px.y); // pix se focus sur le pixel de coordonné px.x et px.y

R = GetRValue(pix); // Valeur rouge du pixel
G = GetGValue(pix); // Valeur vert du pixel
B = GetBValue(pix); // Valeur bleu du pixel

Qui reconnait la couleur du pixel au coordonné px.x et px.y.

Ceci ne me pose pas de problème là où je rencontre mon problème c'est lorsque j'utilise la fonction mouse_event() pour simuler le clic de la souris qu'il ne se passe rien. A noté que cette fonction marche sur tous les autres programmes (Chrome, Skype etc...). Je pense donc que Dofus a installé une sécurité rendant la simulation de clic impossible sur leur programme mais j'aimerais bien savoir si il existe un moyen de contourner cette sécurité par le biais d'une autre fonction ou d'une autre manipulation.

Je suis sous windows 8 et je créer mon programme en C++.

Merci d'avance !

Ps : Je me suis mis en tête de créer ce bot car c'est un challenge que je me lance, le but premier n'est pas de cheater dans ce jeu je n'en ai pas d'intérêt.

3 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
1 févr. 2014 à 18:32
Salut,

mouse_event() est obsolète, utilises à la place

UINT WINAPI SendInput(
UINT nInputs,
LPINPUT pInputs,
int cbSize
);


Utilises 0 pour la valeur de "type" dans la structure INPUT

typedef struct tagINPUT {
DWORD type;
union {
MOUSEINPUT mi;
KEYBDINPUT ki;
HARDWAREINPUT hi;
};
} INPUT, *PINPUT;


Ce qui te permettra d'utiliser la simulation MOUSEINPUT de l'union

typedef struct tagMOUSEINPUT {
LONG dx;
LONG dy;
DWORD mouseData;
DWORD dwFlags;
DWORD time;
ULONG_PTR dwExtraInfo;
} MOUSEINPUT, *PMOUSEINPUT;

et dx, dy remplaceront x, y

bye...
0
Fireflyy Messages postés 2 Date d'inscription samedi 1 février 2014 Statut Membre Dernière intervention 1 février 2014
1 févr. 2014 à 19:51
D'accord merci pour ta réponse je vais voir ce que ça donne. Mais j'ai pas très bien comprise le fonctionnement de typedef struct ... Ça marche comme une structure ou comme une classe ? Est-ce que je vais devoir y acceder par des constructeurs pour définir les valeurs de dx et dy ?
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
2 févr. 2014 à 17:07
Re,

La plupart des APIs Win32 fonctionnent en C (avec des structures) qui sont plus ou moins des classes publiques sans méthodes, sans constructeurs, sans héritages ect...

Exemple pour le pointeur de la sourie vers x, y

System de coordonnée
(0,0) pour haut gauche
(65535,65535) pour bas droit

int x = 100;
int y = 100;

INPUT input;
input.type = 0;
input.mi.mouseData=0;
input.mi.dx =  x*(65536/GetSystemMetrics(SM_CXSCREEN)); 
input.mi.dy =  y*(65536/GetSystemMetrics(SM_CYSCREEN)); 
input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
SendInput(1, &input, sizeof(input));



bye...
0
Rejoignez-nous