Ce module a été écrit par moi sur Delphi XE, mais devrait compiler sans problèmes dans toute autre version de Delphi. Le module implémente la fonctionnalité de «mouvements de souris human-like», les mouvements de souris à savoir que l'homme. Le module sera utile pour ceux qui développent toutes sortes de robots pour les jeux de casino en ligne ou \ poker. Aucun des modules supplémentaires exception de Windows.
14 mars 2013 à 18:50
oui, j'avais noté,il faudrait que les déplacements soient paramètrables afin de les faire coincider avec
ceux qui pourraient être utiles dans l'utilisation de certains jeux.
14 mars 2013 à 12:44
Sinon c'est plus qu'un simple code pour déplacer la souri,
il reproduit le déplacement humain, ce qui dans certain cas
peut être utile dans le développement de jeux ...
@++
11 mars 2013 à 13:04
dans le code puisque ce source est destiné aux débutants
11 mars 2013 à 12:22
11 mars 2013 à 10:32
function IsMouseButtonHeld(button: TClickType): boolean;
begin
Result := false; // à ajouter
case button of
mouse_Left: Result := (GetAsyncKeyState(VK_LBUTTON) <> 0);
mouse_Middle: Result := (GetAsyncKeyState(VK_MBUTTON) <> 0);
mouse_Right: Result := (GetAsyncKeyState(VK_RBUTTON) <> 0);
end;
end;
procedure ClickMouse(button: TClickType);
var
a, b, c: integer;
begin
{ Eventually, should be made to just use Integers }
a := 0; // à ajouter
GetMousePosition(b, c);
HoldMouse(b, c, Button);
repeat
Sleep(20 + Random(30));
a := a + 1;
until (a > 4);
GetMousePosition(b, c);
ReleaseMouse(b, c, Button);
Sleep(50 + Random(50));
end;
à supprimer lastdist := dist;
procedure SleepAndMoveMouse(Time: Integer);
var
Moving: Boolean;
mx, my: Integer;
x, y, xv, yv: Extended;
gx, gy: Extended;
T: Integer;
begin
xv := 0; // à ajouter
yv := 0; // idem
GetMousePosition(mx, my);
x := mx;
y := my;
if (Random(2) = 0) then
Moving := False
else
Moving := True;
gx := 130 + Random(500);
gy := 130 + Random(300);
T := GetTickCount;
repeat
Sleep(10);
if (Moving) then
begin
if (gx > x) then
xv := xv + 0.1
else
xv := xv - 0.1;
if (gy > y) then
yv := yv + 0.1
else
yv := yv - 0.1;
x := x + xv;
y := y + yv;
MoveMouse(Round(x), Round(y));
end;
if (Random(100) = 0) then
Moving := not Moving;
if (Random(30) = 0) then
begin
gx := 130 + Random(500);
gy := 130 + Random(300);
end;
until (Abs(GetTickCount - T) >= Time);
end;
procedure BrakeWindMouse(xs, ys, xe, ye, gravity, wind, minWait, maxWait, targetArea: extended);
var
veloX, veloY, windX, windY, veloMag, dist, randomDist {, lastDist}: extended;
lastX, lastY, MSP, W, maxStep, D, TDist: integer;
sqrt2, sqrt3, sqrt5, PDist: extended;
begin
veloX := 0;
veloY := 0;
windX := 0;
windY := 0;
d := 0; // à ajouter
MSP := MouseSpeed;
sqrt2 := sqrt(2);
sqrt3 := sqrt(3);
sqrt5 := sqrt(5);
TDist := Distance(Round(xs), Round(ys), Round(xe), Round(ye));
if (TDist < 1) then
TDist := 1;
repeat
dist := hypot(xs - xe, ys - ye);
wind := min(wind, dist);
if (dist < 1) then
dist := 1;
PDist := (dist / TDist);
if (PDist < 0.01) then
PDist := 0.01;
{
These constants seem smooth to me, but
feel free to modify these settings however
you wish.
}
if (PDist >= 0.15) then //15% (or higher) dist to destination
begin
D := Round(Round((Round(dist) * 0.3)) / 5);
if (D < 20) then
D := 20;
//D := RandomRange(15, 25); {Original}
end else if (PDist < 0.15) then
begin
if ((PDist <= 0.15) and (PDist >= 0.10)) then //10%-15%
D := RandomRange(8, 13)
else if (PDist < 0.10) then //< 10%
D := RandomRange(4, 7);
end;
if (D <= Round(dist)) then
maxStep := D
else
maxStep := Round(dist);
if dist >= targetArea then
begin
windX := windX / sqrt3 + (random(round(wind) * 2 + 1) - wind) / sqrt5;
windY := windY / sqrt3 + (random(round(wind) * 2 + 1) - wind) / sqrt5;
end else
begin
windX := windX / sqrt2;
windY := windY / sqrt2;
end;
veloX := veloX + windX;
veloY := veloY + windY;
veloX := veloX + gravity * (xe - xs) / dist;
veloY := veloY + gravity * (ye - ys) / dist;
if hypot(veloX, veloY) > maxStep then
begin
randomDist := maxStep / 2.0 + random(round(maxStep) div 2);
veloMag := sqrt(veloX * veloX + veloY * veloY);
veloX := (veloX / veloMag) * randomDist;
veloY := (veloY / veloMag) * randomDist;
end;
lastX := Round(xs);
lastY := Round(ys);
xs := xs + veloX;
ys := ys + veloY;
if (lastX <> Round(xs)) or (lastY <> Round(ys)) then
MoveMouse(Round(xs), Round(ys));
W := (Random(Round(100 / MSP))) * 6;
if (W < 5) then
W := 5;
W := Round(W * 1.2);
Sleep(W);
// lastdist := dist;
until (hypot(xs - xe, ys - ye) < 1);
if (Round(xe) <> Round(xs)) or (Round(ye) <> Round(ys)) then
MoveMouse(Round(xe), Round(ye));
MouseSpeed := MSP;
end;
Cela me paraît un peu compliqué pour un simple déplacement de souris
mais l'idée (qui n'est pas neuve..) est néanmoins intéressante et pourra servir de base
à de futures sources plus élaborées.
7/10
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.