首页 > 解决方案 > 如何将鼠标移动的模拟操作发送到 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进程呢?

标签: c++cunreal-engine4mousemove

解决方案


我加入了 EpicGames 并且可以克隆最新的源代码,我发现 WM_MOUSEMOVE 在“bUsingHighPrecisionMouseInput 为真”时被忽略


推荐阅读