Перемещение мыши в обоих направлениях работает по-разному.C#

Место общения программистов C#
Ответить
Anonymous
 Перемещение мыши в обоих направлениях работает по-разному.

Сообщение Anonymous »

Я пытаюсь перетащить объект с помощью MouseEvent. Однако когда я пытаюсь переместить его влево на 200, как показано в коде, он перемещается на 314. Я думаю, это потому, что для обеих команд используются разные единицы измерения.
Настоящая проблема в том, что когда я пытаюсь переместить его вправо на 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);
Примечание. Я попробовал использовать MouseEventFlags.Absolute с MouseEventFlags.Move, и результаты были катастрофическими. Иногда он движется, а иногда нет.

Подробнее здесь: https://stackoverflow.com/questions/797 ... directions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»