Я хочу отправить вход мыши и клавиатуры, полученный из клиента android, в игры, запущенные на окнах. SendInput
работает практически для всех игр, над которыми я работал до сих пор. Но для SendInput
для работы в игре должно быть окно переднего плана.SendInput в фоновое окно
Чтобы решить эту проблему, я использовал PostMessage(hwnd,...)
с hwnd, являющимся дескриптором игрового окна. Но это не работает, если в игре используется DirectInput. Это было разрешено путем подключения GetDeviceState
. Теперь в другой игре, которую я начал работать, используется WM_INPUT
или исходный ввод, и мне нужно создать исходный вход, чтобы он работал.
Согласно этому MSDN Article
DirectInput представляет собой набор API-вызовов, абстрагирует входных устройств в системе . Внутри DirectInput создает второй поток для чтения данных WM_INPUT, а использование API DirectInput добавит дополнительные служебные данные , чем просто прямое чтение WM_INPUT.
directInput работает с использованием WM_INPUT.
SendInput Функция вставляет события во входных структурах последовательно во входной поток клавиатуры или мыши. Эти события не являются , чередующимися с другими событиями ввода клавиатуры или мыши, вставленными либо пользователем (с клавиатурой или мышью), либо по вызову keybd_event, mouse_event или другими вызовами SendInput.
Таким образом, SendInput также обеспечивает абстракцию.
Все, что я хочу, - это отправить вход в приложение независимо, даже если его окно не находится в фокусе. Таким образом, я смогу сразу отправить вход в несколько игр. Есть ли способ достичь этого, используя один API более высокого уровня, например SendInput? Это можно сделать с помощью SendInput? Есть ли для этого библиотека C/C++?
игры многое сделать, чтобы попытаться предотвратить это, по понятным причинам. Я бы подумал об использовании платы arduino для имитации клавиатуры. – Matt
@Matt SendInput работает отлично, только с недостатком, который работает только на сфокусированном окне. – SMUsamaShah
Если вы посмотрите на параметры [SendInput] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310.aspx), должно быть сразу очевидно, что вы не можете контролировать, где вход идет. Для выполнения этой работы API более высокого уровня не существует, а «PostMessage» является воплощением неправильного. Причина для downvote: вы были 100 000-м членом, чтобы задать этот вопрос, другими словами: он * «не показывает исследовательских усилий» *. – IInspectable