lots done

This commit is contained in:
Boki 2026-03-02 11:17:37 -05:00
parent 1ba7c39c30
commit fbd0ba445a
59 changed files with 6074 additions and 3598 deletions

View file

@ -0,0 +1,139 @@
using InputInterceptorNS;
using Roboto.Core;
using Serilog;
namespace Roboto.Input;
public sealed class InterceptionInputController : IInputController, IDisposable
{
private readonly Humanizer? _humanizer;
private KeyboardHook? _keyboard;
private MouseHook? _mouse;
private bool _disposed;
public bool IsInitialized => _keyboard is not null && _mouse is not null;
public InterceptionInputController(Humanizer? humanizer = null)
{
_humanizer = humanizer;
}
public bool Initialize()
{
try
{
if (!InputInterceptor.CheckDriverInstalled())
{
Log.Warning("Interception driver not installed");
return false;
}
if (!InputInterceptor.Initialize())
{
Log.Warning("Failed to load Interception native library");
return false;
}
_keyboard = new KeyboardHook();
_mouse = new MouseHook();
Log.Information("Interception input controller initialized");
return true;
}
catch (Exception ex)
{
Log.Error(ex, "Failed to initialize Interception hooks");
_keyboard = null;
_mouse = null;
return false;
}
}
public void KeyDown(ushort scanCode)
{
_keyboard?.SimulateKeyDown((KeyCode)scanCode);
}
public void KeyUp(ushort scanCode)
{
_keyboard?.SimulateKeyUp((KeyCode)scanCode);
}
public void KeyPress(ushort scanCode, int holdMs = 50)
{
if (_humanizer is not null)
{
if (_humanizer.ShouldThrottle()) return;
holdMs = _humanizer.GaussianDelay(holdMs);
_humanizer.RecordAction();
}
_keyboard?.SimulateKeyPress((KeyCode)scanCode, holdMs);
}
public void MouseMoveTo(int x, int y)
{
_mouse?.SetCursorPosition(x, y, false);
}
public void MouseMoveBy(int dx, int dy)
{
_mouse?.MoveCursorBy(dx, dy, false);
}
public void LeftClick(int x, int y)
{
if (_humanizer is not null)
{
if (_humanizer.ShouldThrottle()) return;
(x, y) = _humanizer.JitterPosition(x, y);
Thread.Sleep(_humanizer.GaussianDelay(10));
_humanizer.RecordAction();
}
MouseMoveTo(x, y);
Thread.Sleep(_humanizer is not null ? _humanizer.GaussianDelay(10) : 10);
_mouse?.SimulateLeftButtonClick(_humanizer?.GaussianDelay(50) ?? 50);
}
public void RightClick(int x, int y)
{
if (_humanizer is not null)
{
if (_humanizer.ShouldThrottle()) return;
(x, y) = _humanizer.JitterPosition(x, y);
Thread.Sleep(_humanizer.GaussianDelay(10));
_humanizer.RecordAction();
}
MouseMoveTo(x, y);
Thread.Sleep(_humanizer is not null ? _humanizer.GaussianDelay(10) : 10);
_mouse?.SimulateRightButtonClick(_humanizer?.GaussianDelay(50) ?? 50);
}
public void LeftDown()
{
_mouse?.SimulateLeftButtonDown();
}
public void LeftUp()
{
_mouse?.SimulateLeftButtonUp();
}
public void RightDown()
{
_mouse?.SimulateRightButtonDown();
}
public void RightUp()
{
_mouse?.SimulateRightButtonUp();
}
public void Dispose()
{
if (_disposed) return;
_disposed = true;
_keyboard?.Dispose();
_mouse?.Dispose();
_keyboard = null;
_mouse = null;
}
}