Настоящая проблема в том, что когда я пытаюсь переместить его вправо на 200, он перемещается на 493!
Почему это происходит? и как мне обеспечить согласованность в обоих направлениях?
Код: Выделить всё
public struct MousePoint
{
public int X;
public int Y;
public MousePoint(int x, int y)
{
X = x;
Y = y;
}
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetCursorPos(out MousePoint lpMousePoint);
[DllImport("user32.dll")]
private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
private static extern bool GetCursorPos(out MousePoint lpMousePoint);
public static MousePoint GetCursorPosition()
{
var gotPoint = GetCursorPos(out MousePoint currentMousePoint);
if (!gotPoint)
currentMousePoint = new MousePoint(0, 0);
return currentMousePoint;
}
public void MouseEvent(MouseEventFlags value)
{
MousePoint position = GetCursorPosition();
mouse_event((int)value, position.X, position.Y, 0, 0);
}
[Flags]
public enum MouseEventFlags
{
Move = 0x01,
LeftDown = 0x02,
LeftUp = 0x04,
RightDown = 0x08,
RightUp = 0x10,
Absolute = 0x8000
}
// Move to the left
SetCursorPos(1600, 180);
MouseEvent(MouseEventFlags.LeftDown | MouseEventFlags.Absolute);
Thread.Sleep(300);
MouseEvent(MouseEventFlags.Move, -200, 0);
MouseEvent(MouseEventFlags.LeftUp | MouseEventFlags.Absolute);
GetCursorPos(out MousePoint npt);
Thread.Sleep(300);
// Move to the right
Thread.Sleep(300);
SetCursorPos(1240, 180);
MouseEvent(MouseEventFlags.LeftDown | MouseEventFlags.Absolute);
Thread.Sleep(300);
MouseEvent(MouseEventFlags.Move, 128, 0);
MouseEvent(MouseEventFlags.LeftUp | MouseEventFlags.Absolute);
Thread.Sleep(300);
Подробнее здесь: https://stackoverflow.com/questions/797 ... directions
Мобильная версия