我想将从 android 客户端收到的鼠标和键盘输入发送到在 Windows 上运行的游戏。SendInput 几乎适用于我迄今为止工作过的所有游戏。但是要使 SendInput 工作,游戏必须是一个前景窗口。

为了解决这个问题,我使用了 PostMessage(hwnd,...) 和 hwnd 来处理游戏窗口。但如果游戏使用 DirectInput,这将不起作用。这是通过 Hook GetDeviceState 解决的。现在我开始开发的另一个游戏是使用 WM_INPUT 或原始输入,我必须创建原始输入才能使其工作。

根据这个 MSDN Article



directInput 使用 WM_INPUT 工作。



所以 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;

关于c++ - SendInput到后台窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35408495/

10-11 18:47