Я пытаюсь имитировать левую кнопку мыши с помощью SendInput, и он работает, но также перемещает курсор в верхний левый угол экрана (0,0) и я не могу понять, почему.SendInput перемещает курсор, когда я пытаюсь выполнить щелчок мыши
(я использую те же структуры, чтобы переместить курсор (относительно и абсолютно), и это работает.)
private static void Send(INPUT input)
{
SendInput(1, ref input, Marshal.SizeOf(new INPUT()));
}
private static void MouseAction(MouseFlags mf)
{
INPUT aInput = new INPUT();
aInput.type = InputType.INPUT_MOUSE;
aInput.mkhi.mi.dwFlags = mf;
Send(aInput);
}
// Performs a LeftClick but moves the cursor to (0.0)
public static void LeftClick()
{
MouseAction(MouseFlags.MOUSEEVENTF_LEFTDOWN | MouseFlags.MOUSEEVENTF_LEFTUP);
}
Результат такой же, когда я заполняю все члены структуры. Полное определение INPUT:
[StructLayout(LayoutKind.Sequential)]
struct INPUT
{
public InputType type;
public MouseKeyboardHardwareUnion mkhi;
}
[StructLayout(LayoutKind.Explicit)]
struct MouseKeyboardHardwareUnion
{
[FieldOffset(0)]
public MOUSEINPUT mi;
[FieldOffset(0)]
public KEYBDINPUT ki;
}
[StructLayout(LayoutKind.Sequential)]
struct MOUSEINPUT
{
public int dx;
public int dy;
public uint mouseData;
public MouseFlags dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
// Not relevant
[StructLayout(LayoutKind.Sequential)]
struct KEYBDINPUT
{
public KeyboardVirtual wVk;
public ushort wScan;
public KeyboardFlags dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
Заполнение Dx и Dy полях с ввода мышкой текущей позиции курсора, кажется, не решить проблему либо.
[SendInput] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310.aspx) последовательно вставляет события во входной поток ** как атомный блок **. Если вы не понимаете, почему передача 1 в качестве неправильных параметров 'nInputs', вероятно, вы не должны использовать этот API. Передача 'MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP' тоже довольно творческий, если у вас нет доступа к квантовому компьютеру с квантовой мышью, где кнопки можно одновременно нажать и нажать. Вы можете упростить свою жизнь, используя [Автоматизация пользовательского интерфейса] (https://msdn.microsoft.com/en-us/library/ms747327.aspx). – IInspectable