首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SendInput到后台窗口

SendInput到后台窗口
EN

Stack Overflow用户
提问于 2016-02-15 11:43:23
回答 1查看 5.3K关注 0票数 3

我想把从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++库吗?

EN

回答 1

Stack Overflow用户

发布于 2017-01-25 04:53:18

使用RAWINPUTDEVICE结构注册输入设备时,将dwFlags = RIDEV_EXINPUTSINK设置为在进程处于后台时接收输入。

示例:

代码语言:javascript
复制
RAWINPUTDEVICE rid;

rid.usUsagePage = 1;
rid.usUsage     = 4;    // Joystick
rid.dwFlags     = RIDEV_EXINPUTSINK;
rid.hwndTarget  = window;

if (!RegisterRawInputDevices(&rid, 1, sizeof(RAWINPUTDEVICE)))
    return -1;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35408495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档