将输入发送到后台窗口
SendInput to background window
我想将从安卓客户端接收的鼠标和键盘输入发送到在Windows上运行的游戏。 SendInput
适用于我迄今为止玩过的几乎所有游戏。但要让SendInput
发挥作用,游戏必须是一个前景窗口。
为了解决这个问题,我使用了PostMessage(hwnd,...)
,hwnd 是游戏窗口的句柄。但是,如果游戏使用直接输入,则这不起作用。这是通过钩GetDeviceState
解决的。现在我开始开发的另一个游戏是使用WM_INPUT
或原始输入,我必须创建原始输入才能使其正常工作。
根据这篇 MSDN 文章
直接输入是一组 API 调用,用于抽象 系统。在内部,DirectInput 创建第二个线程来读取 WM_INPUT数据,并使用直接输入 API 会增加更多开销 而不是简单地直接阅读WM_INPUT。
直接输入使用 WM_INPUT 工作。
SendInput 函数在 INPUT 结构中插入事件 串行到键盘或鼠标输入流中。这些事件不是 穿插着插入的其他键盘或鼠标输入事件 用户(使用键盘或鼠标(或通过调用keybd_event, mouse_event,或对 SendInput 的其他调用。
所以SendInput也提供了抽象。
我想要的只是将输入独立地发送到应用程序,即使它的窗口没有焦点。这样我就可以一次向多个游戏发送输入。有没有办法使用像 SendInput 这样的更高级别的 API 调用来实现这一点?这可以通过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;
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 如何在cpp文件之间切换窗口?在Qt中
- QuadTree只在窗口的右上角绘制
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 处理闪烁窗口事件
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 在后台控制台窗口中显示光标
- 窗口后台处理程序究竟如何确定它将发送到打印处理器的数据类型?
- 如何使用C ++在后台运行软件而不显示任何窗口
- 将输入发送到后台窗口
- 如何在后台窗口中移动鼠标
- 如何防止Win32应用程序在主窗口关闭后在后台运行
- 在exec()之后,窗口模式QFileDialog将父级推送到后台
- 在后台运行命令行而不打开窗口
- 停止/启动后台线程中的窗口挂钩
- 我如何在'opencv'函数,当我构建隐藏窗口(在后台运行)时获得像素的颜色