c++ - 如何将鼠标移动的模拟操作发送到 UE4 应用程序
问题描述
整个计算机的鼠标移动可以使用 SendInput(MOUSEEVENTF_MOVE) 来完成,它可以在 UE4 窗口激活时进行操作。
鉴于有多个 UE4 Windows,可能需要有一个中转服务来统一处理它们,但这可能需要切换应用程序甚至桌面。
如果我可以将鼠标移动信息发送到指定的 UE4 进程,那就太好了。不幸的是,键盘输入和鼠标点击可以用WM_KEYDOWN/WM_LBUTTONDOWN等来完成,但是鼠标移动不能用WM_MOUSEMOVE来完成
看了UE4的源码,发现鼠标移动事件使用VM_INPUT + GetDeviceData,因为RAWINPUT的定义是不可见的,所以无法模拟RAWINPUT的消息。另外微软已经将GlobalAlloc实现为LocalAlloc,所以即使可以模拟,也不能注入到不同的进程中。即使可以注入到进程中,我也无法修改UE4源码中GetDeviceData的使用方法。
听说UE4里面有个叫“像素流”的技术,我们可以用webrtc直接操作远程UE4应用,包括鼠标移动,我测试了一下,是真的,但是不知道webrtc里面发的是什么消息, 如果我知道,也许我可以给它发一个类似的消息来操作它。
那么,有没有什么方法可以在没有webrtc的情况下同时操作多个UE4进程呢?
解决方案
我加入了 EpicGames 并且可以克隆最新的源代码,我发现 WM_MOUSEMOVE 在“bUsingHighPrecisionMouseInput 为真”时被忽略
推荐阅读
- python - 对 .txt 文件行进行排序会添加不正确的行
- c++ - Is C++ compiler allowed to store function ptr in register before its arguments are evaluated?
- c# - 如何在 DelegatingHandler 中读取发送到操作方法 (WebAPI) 的参数
- java - Java 不支持的内容编码:br
- python - 将 seaborn 传说分成两个不同的盒子
- python - 尝试从另一个文件夹导入时未找到模块错误问题
- node.js - 为什么 TypeORM 使用 FindOn(id) 生成两个查询
- reactjs - 如何使用 ant-Design 在反应表单中执行良好的密码验证
- iis - 随机获取登录提示
- xml - 序言中不允许内容,但序言在运行时可以吗?Groovy、Jenkins、Java、管道、XML