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

Signaler
Messages postés
2
Date d'inscription
samedi 1 février 2014
Statut
Membre
Dernière intervention
1 février 2014
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
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.
A voir également:

3 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
20
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...
Messages postés
2
Date d'inscription
samedi 1 février 2014
Statut
Membre
Dernière intervention
1 février 2014

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 ?
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
20
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...