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

Global mouse variable.