gpt4 book ai didi

c++ - SendInput 到后台窗口

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:54 27 4
gpt4 key购买 nike

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

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

根据这个MSDN Article

DirectInput is a set of API calls that abstracts input devices on the system. Internally, DirectInput creates a second thread to read WM_INPUT data, and using the DirectInput APIs will add more overhead than simply reading WM_INPUT directly.

directInput 使用 WM_INPUT 工作。

The SendInput function inserts the events in the INPUT structures serially into the keyboard or mouse input stream. These events are not interspersed with other keyboard or mouse input events inserted either by the user (with the keyboard or mouse) or by calls to keybd_event, mouse_event, or other calls to 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;

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com