Я хочу отправить ввод с помощью мыши и клавиатуры, полученный от клиента Android, в игры, работающие на Windows.
SendInput
работает почти для всех игр, в которых я работал до сих пор. Но для SendInput
Для работы игры должно быть переднее окно.
Чтобы решить, что я использовал PostMessage(hwnd,...)
с hwnd, являющимся дескриптором окна игры. Но это не работает, если игра использует DirectInput. Это было решено путем подключения GetDeviceState
, Теперь другая игра, над которой я начал работать, использует WM_INPUT
или необработанный ввод, и я должен создать необработанный ввод, чтобы заставить его работать.
Согласно этому Статья MSDN
DirectInput — это набор вызовов API, который абстрагирует устройства ввода на
система. Внутренне DirectInput создает второй поток для чтения
Данные WM_INPUT и использование API DirectInput увеличат накладные расходы.
чем просто чтение WM_INPUT напрямую.
directInput работает с использованием WM_INPUT.
SendInput функция вставляет события в структуры INPUT
последовательно в поток ввода с клавиатуры или мыши. Эти события не
перемежаются с другими событиями ввода клавиатуры или мыши, вставленными либо
пользователем (с помощью клавиатуры или мыши) или вызовами keybd_event,
mouse_event или другие вызовы SendInput.
Так что SendInput также предоставляет абстракцию.
Все, что я хочу, это отправлять входные данные приложению независимо, даже когда его окно не в фокусе. Таким образом, я смогу отправлять информацию сразу нескольким играм. Есть ли способ достичь этого с помощью одного высокоуровневого вызова API, такого как SendInput? Можно ли это сделать с помощью SendInput? Есть ли библиотека C / C ++ для этого?
При регистрации устройства ввода с использованием структуры RAWINPUTDEVICE,
установите dwFlags = RIDEV_EXINPUTSINK, чтобы получать входные данные, когда процесс находится в фоновом режиме.
Пример :
RAWINPUTDEVICE rid;
rid.usUsagePage = 1;
rid.usUsage = 4; // Joystick
rid.dwFlags = RIDEV_EXINPUTSINK;
rid.hwndTarget = window;
if (!RegisterRawInputDevices(&rid, 1, sizeof(RAWINPUTDEVICE)))
return -1;
Других решений пока нет …