我想把从android客户端收到的鼠标和键盘输入发送到windows上运行的游戏。SendInput适用于几乎所有的游戏,到目前为止我已经工作过了。但是要使SendInput工作,游戏必须是一个前景窗口。
为了解决这个问题,我使用了PostMessage(hwnd,...),同时使用hwnd处理游戏窗口。但是,如果游戏使用的是DirectInput,这是行不通的。这是通过勾引GetDeviceState来解决的。现在,我开始做的另一个游戏是使用WM_INPUT或原始输入,我必须创建原始输入才能工作。
根据这个MSDN条款
DirectInput是一组API调用,用于抽象系统上的输入设备。在内部,DirectInput创建第二个线程来读取WM_INPUT数据,使用DirectInput API将增加比直接读取WM_INPUT更多的开销。
directInput使用WM_INPUT工作。
SendInput函数将输入结构中的事件串行插入键盘或鼠标输入流中。这些事件不与用户插入的其他键盘或鼠标输入事件交织在一起(使用键盘或鼠标),也不通过调用keybd_event、mouse_event或其他对SendInput的调用插入。
因此,SendInput也提供了抽象。
我只想独立地将输入发送到应用程序,即使它的窗口不在焦点上。这样的话,我就可以同时向多个游戏发送输入。是否有任何方法可以使用像SendInput这样的更高级别的API调用来实现这一点?这能用SendInput来完成吗?有C/C++库吗?
发布于 2017-01-25 04:53:18
使用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;https://stackoverflow.com/questions/35408495
复制相似问题