Я разработал простое консольное приложение для опроса контроллера Xbox с помощью xinput.Я хотел бы использовать значения, полученные из одной из кнопок для перемещения мыши.Я могу получить значения x и y из большого пальца, но когда я использую эти значения для SendInput () (используя User32.dll), мышь не двигается, и возвращаемое значение равно 0.
Согласно Microsoft , «Если функция возвращает ноль, вход был уже заблокирован другим потоком».
Как мне найти другой поток, который его блокирует?Это просто простое консольное приложение (exe), запущенное Visual Studio, которое выводит значения x и y на экран и пытается переместить мышь.
long x = controller.x; // values from the controller
long y = controller.y; // these are checked and do contain numbers
INPUT mouseMoveInput = new INPUT();
mouseMoveInput.type = 0; // mouse
mouseMoveInput.mi.dx = x;
mouseMoveInput.mi.dy = y;
mouseMoveInput.mi.mouseData = 0;
mouseMoveInput.mi.dwFlags = MOUSEEVENTF_MOVE;
var result = SendInput(1, ref mouseMoveInput, Marshal.SizeOf(new INPUT());
// result always returns 0
Я что-то упустил?Должно ли это работать?
Вот объявления:
[StructLayout(LayoutKind.Explicit)]
public struct MOUSEINPUT
{
[FieldOffset(0)]
public long X;
[FieldOffset(8)]
public long Y;
[FieldOffset(16)]
public uint MouseData;
[FieldOffset(20)]
public uint Flags;
[FieldOffset(24)]
public uint Time;
[FieldOffset(28)]
public IntPtr ExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
internal struct KEYBOARDINPUT
{
public ushort Vk;
public ushort Scan;
public uint Flags;
public uint Time;
public IntPtr ExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
internal struct HARDWAREINPUT
{
public uint Msg;
public ushort ParamL;
public ushort ParamH;
}
[StructLayout(LayoutKind.Explicit)]
public struct INPUT
{
[FieldOffset(0)]
public uint type;
[FieldOffset(4)]
public MOUSEINPUT mi;
[FieldOffset(4)]
public KEYBOARDINPUT ki;
[FieldOffset(4)]
public HARDWAREINPUT hi;
}
ОБНОВЛЕНИЕ: использование mouse-event
работает, но эта функция устарела.Есть ли проблема с использованием его в любом случае, поскольку он работает?
Есть что-то странное, что я получаю с размерами структуры:
Размер тега INPUT: 40
Размер mouseMoveInput: 40
Размер MOUSEINPUT: 32
Размер uint: 4
Но если tagINPUT
состоит из MOUSEINPUT
и uint
, то должен ли его размер быть 36?