Mouse

Methods to interact with the mouse.


type EMouseDistribution

The available distributions used to generate a point in a box.

EMouseDistribution = (

MOUSE_DISTRIBUTION_DEFAULT, // Use Mouse.Distribution MOUSE_DISTRIBUTION_RANDOM, // Completely random point MOUSE_DISTRIBUTION_GAUSS, // Weighted towards the center MOUSE_DISTRIBUTION_SKEWED, // Weighted torwards current mouse position MOUSE_DISTRIBUTION_ROWP // Weighted torwards current mouse position but more “rounded” compared to MOUSE_DISTRIBUTION_SKEWED

);


type TMouse

TMouse = record(TSRLBaseRecord)

Speed: Double; // Overall mouse speed (Default: 12) Gravity, Wind: Double; // Gravity & Wind for generating mouse path (Default: 9 & 5) Distribution: EMouseDistribution; // Default distribution to use (Default: MOUSE_DISTRIBUTION_ROWP) MissChance: Double; // Percentage chance to “Miss” the mouse (Default: 10) IdleInterval: Double; // Distance to travel before calling Mouse.Idle() (Default: 0) IdleProgress: Double; IdleGoal: Double; OnMoving: TMouseMovingEvent; // Callback while mouse is being moved OnTeleport: TMouseTeleportEvent; // Callback when mouse is teleported

end;


Mouse.Setup

procedure TMouse.Setup;

Initializes mouse variables.

Note

This is automatically called on the Mouse variable.


Mouse.Teleport

procedure TMouse.Teleport(X, Y: Int32);

Teleport the mouse to the desired X,Y coordinates.

Example:

Mouse.Teleport(50, 50);

Mouse.Teleport

procedure TMouse.Teleport(P: TPoint);

Teleport the mouse to the desired point.

Example:

Mouse.Teleport(50, 50);

Mouse.Position

function TMouse.Position: TPoint;

Returns the mouse current position.

Example:

var P: TPoint;

P := Mouse.Position();

WriteLn('X: ', P.X);
WriteLn('Y: ', P.Y);

Mouse.Hold

procedure TMouse.Hold(Button: Int32);

Holds the desired mouse button down. The button will continue to be held down until Mouse.Release is called.

Available buttons:
  • MOUSE_LEFT

  • MOUSE_RIGHT

  • MOUSE_SCROLL

  • MOUSE_EXTRA_1

  • MOUSE_EXTRA_2

Example:

Mouse.Hold(MOUSE_LEFT); // The mouse is now holding down left click.

Mouse.Release

procedure TMouse.Release(Button: Int32);

Releases the desired mouse button which has been previously held.

Available buttons:
  • MOUSE_LEFT

  • MOUSE_RIGHT

  • MOUSE_SCROLL

  • MOUSE_EXTRA_1

  • MOUSE_EXTRA_2

Example:

Mouse.Release(MOUSE_LEFT); // The mouse is no holding left click.

Mouse.WindMouse

procedure TMouse.Release(Button: Int32);

The internal algorithm used by Mouse.Move to move the mouse in a human’ish way.

Credit: BenLand100 (https://github.com/BenLand100/SMART/blob/master/src/EventNazi.java#L201)


Mouse.Idle

procedure TMouse.Idle;

When IdleInterval is reached this is called. Override to change behavior.

  • An IdleInterval of 1.0 equals to the distance between the top left and bottom right of the client.

  • Assuming the client dimensions are 500,500 the distance between (0,0) and (500,500) is ~700. With an IdleInterval of 2.0 this would automatically be called every time the mouse has travelled ~1400 pixels.


Mouse.Move

procedure TMouse.Move(Destination: TPoint);

Moves the mouse to the desired point.

Example:

var P: TPoint;

P.X := 50;
P.Y := 50;

Mouse.Move(P); // The mouse is now at 50,50

Mouse.Move

procedure TMouse.Move(P: TPoint);

Moves the mouse to the desired X,Y coordinate.

Example:

Mouse.Move(50, 50); // The mouse is now at 50,50

Mouse.Move

procedure TMouse.Move(Center: TPoint; Radius: Int32; ForcedMove: Boolean = False);

Moves the mouse to a random point in an circle defined by Center and Radius.

  • ForcedMove determines if the mouse should be moved if already inside the circle. By default this is False.

Example:

Mouse.Move([100, 100], 25); // The mouse is now randomly within 100,100 with a radius of 25.

Mouse.Move

procedure TMouse.Move(Box: TBox; ForcedMove: Boolean = False; Distribution: EMouseDistribution = MOUSE_DISTRIBUTION_DEFAULT);

Moves the mouse to a random point in the box.

  • ForcedMove determines if the mouse should be moved if already in the box. By default this is False

  • Distribution determines the method to generate a random point. By default this uses Mouse.Distribution

Example:

var B: TBox;

B.X1 := 100;
B.Y1 := 100;
B.X2 := 200;
B.Y2 := 200;

Mouse.Move(B); // The mouse is now randomly within 100,100,200,200

Mouse.Move

procedure TMouse.Move(Circle: TCircle; ForcedMove: Boolean = False);

Moves the mouse to a random point in an circle.

  • ForcedMove determines if the mouse should be moved if already in the circle. By default this is False.

Example:

var C: TCircle;

C.X := 100;
C.Y := 100;
C.Radius := 25;

Mouse.Move(C); // The mouse is now randomly within 100,100 with a radius of 25.

Mouse.Move

procedure TMouse.Move(Rect: TRectangle; ForcedMove: Boolean = False);

Moves the mouse to a random point in an rectangle.

  • ForcedMove determines if the mouse should be moved if already in the rectangle. By default this is False.

Example:

var TPA: TPointArray;
var R: TRectangle;

R := TPA.MinAreaRect();

Mouse.Move(R);

Mouse.Click

procedure TMouse.Click(Button: Int32);

Clicks the mouse with the desired button at the current mouse position.

Available buttons:
  • MOUSE_LEFT

  • MOUSE_RIGHT

  • MOUSE_SCROLL

  • MOUSE_EXTRA_1

  • MOUSE_EXTRA_2

Example:

Mouse.Click(MOUSE_LEFT); // Left click the current mouse position

Mouse.Click

procedure TMouse.Click(X, Y: Int32; Button: Int32);

Moves the mouse to to X,Y and clicks the desired button.

Available buttons:
  • MOUSE_LEFT

  • MOUSE_RIGHT

  • MOUSE_SCROLL

  • MOUSE_EXTRA_1

  • MOUSE_EXTRA_2

Example:

Mouse.Click(50, 50, MOUSE_LEFT); // Left click at 50,50

Mouse.Click

procedure TMouse.Click(P: TPoint; Button: Int32);

Moves the mouse to P.X,P.Y and click the desired button.

Available buttons:
  • MOUSE_LEFT

  • MOUSE_RIGHT

  • MOUSE_SCROLL

  • MOUSE_EXTRA_1

  • MOUSE_EXTRA_2

Example:

var P: TPoint;

P.X := 50;
P.Y := 50;

Mouse.Click(P, MOUSE_LEFT); // Left click at 50,50

Mouse.Click

TMouse.Click(Circle: TCircle; Button: Int32; ForcedMove: Boolean = False);

Moves the mouse to a random point in an circle defined by Center and Radius and clicks the desired button.

  • ForcedMove determines if the mouse should be moved if already in the circle. By default this is False.

Example:

Mouse.Click([100, 100], 25, MOUSE_LEFT); // Left clicked somewhere nearby 100,100 with a radius of 25.

Mouse.Click

procedure TMouse.Click(Box: TBox; Button: Int32; ForcedMove: Boolean = False; Distribution: EMouseDistribution = MOUSE_DISTRIBUTION_DEFAULT);

Moves the mouse to a random point in the box and clicks the desired button.

  • ForcedMove determines if the mouse should be moved if already in the box. By default this is False

  • Distribution determines the method to generate a random point. By default this uses Mouse.Distribution

Available buttons:
  • MOUSE_LEFT

  • MOUSE_RIGHT

  • MOUSE_SCROLL

  • MOUSE_EXTRA_1

  • MOUSE_EXTRA_2

Example:

var B: TBox;

B.X1 := 100;
B.Y1 := 100;
B.X2 := 200;
B.Y2 := 200;

Mouse.Click(B, MOUSE_LEFT); // Left clicked somewhere within 100,100,200,200

Mouse.Click

TMouse.Click(Circle: TCircle; Button: Int32; ForcedMove: Boolean = False);

Moves the mouse to a random point in an circle and clicks the desired button.

  • ForcedMove determines if the mouse should be moved if already in the circle. By default this is False.

Example:

var C: TCircle;

C.X := 100;
C.Y := 100;
C.Radius := 25;

Mouse.Click(C, MOUSE_LEFT); // Left clicked somewhere nearby 100,100 with a radius of 25.

Mouse.Click

procedure TMouse.Click(Rect: TRectangle; Button: Int32; ForcedMove: Boolean = False);

Moves the mouse to a random point in an rectangle then clicks the desired button.

  • ForcedMove determines if the mouse should be moved if already in the rectangle. By default this is False.

Example:

var TPA: TPointArray;
var R: TRectangle;

R := TPA.MinAreaRect();

Mouse.Click(R, MOUSE_LEFT);

Mouse.Miss

function TMouse.Miss(P: TPoint): TPoint;

“Misses” the destination point P. Will stop somewhere along the path or overshoot. Returns the position the mouse was moved to.

This could automatically be called depending on Mouse.MissChance.


Mouse.DragTo

procedure TMouse.DragTo(X, Y: Int32; Button: Int32 = MOUSE_LEFT)

Holds the desired button and moves the mouse to X,Y coordinates.

  • Button by default is MOUSE_LEFT.

Example:

Mouse.DragTo(50, 50); // Moves the mouse to 50,50 while holding MOUSE_LEFT

Mouse.DragTo

procedure TMouse.DragTo(P: TPoint; Button: Int32 = MOUSE_LEFT)

Holds the desired button and moves the mouse to P coordinates.

  • Button by default is MOUSE_LEFT.

Example:

var P: TPoint;

P.X := 50;
P.Y := 50;

Mouse.DragTo(P); // Moves the mouse to 50,50 while holding MOUSE_LEFT

Mouse.Scroll

procedure TMouse.Scroll(Amount: Int32; Down: Boolean);

Scrolls the mouse X amount of times at the current mouse position.

Example:

Mouse.Scroll(5, True);  // Scroll 5 times down
Mouse.Scroll(5, False); // Scroll 5 times up

Mouse.Scroll

procedure TMouse.Scroll(P: TPoint; Scrolls: Int32; Down: Boolean);

Moves the mouse to desired position P then scrolls X amount of times.

Example:

var P: TPoint;

P.X := 50;
P.Y := 50;

Mouse.Scroll(P, 5, True);  // Scroll 5 times down at 50,50
Mouse.Scroll(P, 5, False); // Scroll 5 times up at 50,50

Mouse.Scroll

procedure TMouse.Scroll(Box: TBox; Amount: Int32; Down: Boolean);

Moves the mouse to a random point in the box then scrolls X amount of times.

Example:

var B: TBox;

B.X1 := 100;
B.Y1 := 100;
B.X2 := 200;
B.Y2 := 200;

Mouse.Scroll(B, 5, True); // Scroll the mouse down 5 times somewhere within 100,100,200,200
Mouse.Scroll(B, 5, False); // Scroll the mouse up 5 times somewhere within 100,100,200,200

var Mouse