Skip to content

Commit

Permalink
Add duration and steps
Browse files Browse the repository at this point in the history
  • Loading branch information
lucassklp committed Jul 1, 2023
1 parent 95348aa commit 2b453f4
Show file tree
Hide file tree
Showing 8 changed files with 311 additions and 40 deletions.
13 changes: 7 additions & 6 deletions Desktop.Robot/AbstractRobot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ public abstract class AbstractRobot : IRobot

public abstract void MouseMove(int x, int y);

public abstract void MouseScrollVertical(int value);
public abstract void MouseScroll(int value);

public abstract void MouseScroll(int value, int duration);

public abstract void MouseScroll(int value, int duration, int steps);

public void MouseMove(Point p)
{
Expand Down Expand Up @@ -71,10 +75,7 @@ public void Delay(uint ms)

protected void ApplyAutoDelay()
{
if (AutoDelay > 0)
{
Thread.Sleep((int)AutoDelay);
}
Thread.Sleep((int)AutoDelay);
}
}
}
}
2 changes: 2 additions & 0 deletions Desktop.Robot/Desktop.Robot.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@
<RepositoryUrl>https://github.com/lucassklp/Desktop.Robot</RepositoryUrl>
<PackageIcon>logo.mini.png</PackageIcon>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>

<ItemGroup>
<None Include="..\LICENSE" Pack="true" PackagePath="\" />
<None Include="..\Resources\logo.mini.png" Pack="true" PackagePath="\" />
<None Include="..\README.md" Pack="true" PackagePath="\"/>
</ItemGroup>

<ItemGroup>
Expand Down
4 changes: 3 additions & 1 deletion Desktop.Robot/IRobot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ public interface IRobot
void Delay(uint ms);
void MouseMove(int x, int y);
void MouseMove(Point p);
void MouseScrollVertical(int value);
void MouseScroll(int value);
void MouseScroll(int value, int duration);
void MouseScroll(int value, int duration, int steps);
Point GetMousePosition();
}
}
27 changes: 24 additions & 3 deletions Desktop.Robot/Linux/Robot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,21 +69,42 @@ public override void MouseMove(int x, int y)
moveMouse(x, y);
}

public override void MouseScrollVertical(int value)

public override void MouseScroll(int value)
{
ApplyAutoDelay();
DoMouseScroll(value, 100);
}

public override void MouseScroll(int value, int duration)
{
MouseScroll(value, duration, 100);
}

public override void MouseScroll(int value, int duration, int steps)
{
ApplyAutoDelay();
for (int i = 0; i < steps; i++)
{
DoMouseScroll(value / steps, duration / steps);
}
}

private void DoMouseScroll(int value, int duration)
{
do
{
if (value < 0)
{
click(true, Common.UP_BUTTON);
Thread.Sleep(100);
Thread.Sleep(duration);
click(false, Common.UP_BUTTON);
value++;
}
else
{
click(true, Common.DOWN_BUTTON);
Thread.Sleep(100);
Thread.Sleep(duration);
click(false, Common.DOWN_BUTTON);
value--;
}
Expand Down
24 changes: 23 additions & 1 deletion Desktop.Robot/OSX/Robot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;

namespace Desktop.Robot.OSX
{
Expand Down Expand Up @@ -67,11 +68,32 @@ public override Point GetMousePosition()
return new Point(coords[0], screenRes[1] - coords[1]);
}

public override void MouseScrollVertical(int value)
public override void MouseScroll(int value)
{
ApplyAutoDelay();
DoMouseScroll(value);
}

public override void MouseScroll(int value, int duration)
{
MouseScroll(value, duration, 50);
}

public override void MouseScroll(int value, int duration, int steps)
{
ApplyAutoDelay();
for (int i = 0; i < steps; i++)
{
Thread.Sleep(duration / steps);
DoMouseScroll(value / steps);
}
}
private void DoMouseScroll(int value)
{
verticalScroll(value);
}


[DllImport("./osx.os", EntryPoint = "setMousePosition")]
private static extern void setMousePosition(int x, int y);

Expand Down
16 changes: 13 additions & 3 deletions Desktop.Robot/Robot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,22 @@ public void MouseMove(Point p)
robot.MouseMove(p);
}

public void MouseScrollVertical(int value)
public void MouseScroll(int value)
{
robot.MouseScrollVertical(value);
robot.MouseScroll(-1 * value);
}

public void MouseUp(IClick click)
public void MouseScroll(int value, int duration)
{
robot.MouseScroll(-1 * value, duration);
}

public void MouseScroll(int value, int duration, int steps)
{
robot.MouseScroll(-1 * value, duration, steps);
}

public void MouseUp(IClick click)
{
robot.MouseUp(click);
}
Expand Down
67 changes: 51 additions & 16 deletions Desktop.Robot/Windows/Robot.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Threading;

namespace Desktop.Robot.Windows
{
Expand Down Expand Up @@ -70,7 +72,43 @@ public override void MouseMove(int x, int y)
SetCursorPos(x, y);
}

[DllImport("user32.dll")]
public override void MouseScroll(int value)
{
ApplyAutoDelay();
DoMouseScroll(value * 100);
}

public override void MouseScroll(int value, int duration)
{
MouseScroll(value, duration, 10);
}

public override void MouseScroll(int value, int duration, int steps)
{
ApplyAutoDelay();
for (int i = 0; i < steps; i++)
{
Thread.Sleep(duration / steps);
DoMouseScroll(value * 100 / steps);
}
}

private void DoMouseScroll(int value)
{
var inputs = new List<Input>();

var input = new Input()
{
Type = InputType.Mouse,
MouseInputWithUnion = new MouseInput(value / 10, MouseState.MouseWheelUpDown)
};

inputs.Add(input);

SendInput(1, inputs.ToArray(), Marshal.SizeOf(inputs[0]) * inputs.Count);
}

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetCursorPos(int x, int y);

Expand Down Expand Up @@ -139,7 +177,18 @@ public MouseInput(int scroll, MouseState dwFlags)
dwExtraInfo = 0;
}

public bool Equals(MouseInput other)
public MouseInput(int scroll, MouseState dwFlags, int duration)
{
dx = 0;
dy = 0;
mouseData = scroll;
this.dwFlags = dwFlags;
time = duration;
dwExtraInfo = 0;
}


public bool Equals(MouseInput other)
{
return this.dwFlags == other.dwFlags
? this.mouseData == other.mouseData
Expand Down Expand Up @@ -168,19 +217,5 @@ public enum InputType : uint
Keyboard = 1,
Hardware = 3
}

public override void MouseScrollVertical(int value)
{
var inputs = new[]
{
new Input
{
Type = InputType.Mouse,
MouseInputWithUnion = new MouseInput(value, MouseState.MouseWheelUpDown)
}
};
var response = SendInput(1, inputs, Marshal.SizeOf(inputs[0]));
Debug.Assert(response == 0);
}
}
}
Loading

0 comments on commit 2b453f4

Please sign in to comment.