Fix Absolute Send, Add Absolute Click

pull/15/head
evilC 6 years ago
parent 6efc89d448
commit 894ec210a1

@ -47,6 +47,20 @@ namespace AutoHotInterception.Helpers
return ret.ToArray();
}
/// <summary>
/// Converts a button index plus a state into a State value for a mouse Stroke
/// </summary>
/// <param name="btn">0 = LMB, 1 = RMB etc</param>
/// <param name="state">1 = Press, 0 = Release</param>
/// <returns>A State value for a Mouse Stroke</returns>
public static ushort ButtonAndStateToStrokeState(int btn, int state)
{
var bit = btn * 2;
if (state == 0)
bit += 1;
return (ushort)(1 << bit);
}
public class DeviceInfo
{
public int Id { get; set; }

@ -199,23 +199,34 @@ namespace AutoHotInterception
{
IsValidDeviceId(true, id);
//var st = btn * 4;
//if (state == 0)
//{
// st *= 2;
//}
var stroke = new ManagedWrapper.Stroke();
var bit = btn * 2;
if (state == 0)
bit += 1;
stroke.mouse.state = (ushort)(1 << bit);
var stroke = new ManagedWrapper.Stroke {mouse = {state = ButtonAndStateToStrokeState(btn, state)}};
ManagedWrapper.Send(_deviceContext, id, ref stroke, 1);
}
/// <summary>
/// Same as <see cref="SendMouseButtonEvent"/>, but sends button events in Absolute mode (with coordinates)
/// </summary>
/// <param name="id"></param>
/// <param name="btn"></param>
/// <param name="state"></param>
/// <param name="x"></param>
/// <param name="y"></param>
public void SendMouseButtonEventAbsolute(int id, int btn, int state, int x, int y)
{
var stroke = new ManagedWrapper.Stroke
{
mouse =
{
x = x, y = y, flags = (ushort)ManagedWrapper.MouseFlag.MouseMoveAbsolute,
state = ButtonAndStateToStrokeState(btn, state)
}
};
ManagedWrapper.Send(_deviceContext, id, ref stroke, 1);
}
public bool SendMouseMove(int id, int x, int y)
public void SendMouseMove(int id, int x, int y)
{
return SendMouseMoveRelative(id, x, y);
SendMouseMoveRelative(id, x, y);
}
/// <summary>
@ -225,13 +236,12 @@ namespace AutoHotInterception
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public bool SendMouseMoveRelative(int id, int x, int y)
public void SendMouseMoveRelative(int id, int x, int y)
{
IsValidDeviceId(true, id);
var stroke = new ManagedWrapper.Stroke { mouse = { x = x, y = y, flags = (ushort)ManagedWrapper.MouseFlag.MouseMoveRelative } };
ManagedWrapper.Send(_deviceContext, id, ref stroke, 1);
return true;
}
/// <summary>
@ -243,14 +253,12 @@ namespace AutoHotInterception
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public bool SendMouseMoveAbsolute(int id, int x, int y)
public void SendMouseMoveAbsolute(int id, int x, int y)
{
IsValidDeviceId(true, id);
var stroke = new ManagedWrapper.Stroke { mouse = { x = x, y = y, flags = 1, state = 0, information = 0, rolling = 0} };
//var stroke = new ManagedWrapper.Stroke { mouse = { x = x, y = y, flags = (ushort)ManagedWrapper.MouseFlag.MouseMoveAbsolute} };
var stroke = new ManagedWrapper.Stroke { mouse = { x = x, y = y, flags = (ushort)ManagedWrapper.MouseFlag.MouseMoveAbsolute } };
ManagedWrapper.Send(_deviceContext, id, ref stroke, 1);
return true;
}
#endregion

@ -39,6 +39,10 @@ class AutoHotInterception {
this.Instance.SendMouseButtonEvent(id, btn, state)
}
SendMouseButtonEventAbsolute(id, btn, state, x, y){
this.Instance.SendMouseButtonEventAbsolute(id, btn, state, x, y)
}
SendMouseMove(id, x, y){
this.Instance.SendMouseMove(id, x, y)
}

@ -0,0 +1,34 @@
#SingleInstance force
#Persistent
#include Lib\AutoHotInterception.ahk
AHI := new AutoHotInterception()
;~ mouseId := AHI.GetMouseId(0x46D, 0xC531)
mouseId := AHI.GetMouseId(0x0B57, 0x9091)
;~ ToolTip % "MouseId: " mouseId
;~ AHI.SubscribeKey(keyboardId, GetKeySC("1"), true, Func("KeyEvent"))
AHI.SubscribeMouseMoveAbsolute(mouseId, false, Func("MouseEvent"))
return
F12::
AHI.SendMouseButtonEventAbsolute(mouseId, 0, 1, 0, 20000)
Sleep 10
AHI.SendMouseButtonEventAbsolute(mouseId, 0, 0, 0, 20000)
;~ AHI.SendMouseMoveAbsolute(mouseId, 0, 20000)
;~ AHI.SendMouseMoveRelative(mouseId, 100, 0)
;~ AHI.SendMouseButtonEvent(mouseId, 1, 1)
;~ Sleep 10
;~ AHI.SendMouseButtonEvent(mouseId, 1, 0)
return
KeyEvent(state){
ToolTip % "State: " state
}
MouseEvent(x, y){
;~ ToolTip % "x:" x
}
^Esc::
ExitApp
Loading…
Cancel
Save