注入DX游戏并使游戏空闲
Posted
技术标签:
【中文标题】注入DX游戏并使游戏空闲【英文标题】:Injecting to a DX game and make game idle 【发布时间】:2014-11-19 17:01:14 【问题描述】:我有一个要注入 DX 游戏的 DLL。在 DLL 中,我禁用 XInput、原始输入以及 WndProc 的子类以过滤一堆输入消息,如 WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_INPUT 等。使用 XInputEnable(FALSE) 禁用 XInput 并使用 RIDEV_REMOVE 标志注册原始设备。
虽然它适用于某些游戏,但并不适用于所有游戏。某些游戏仍然有鼠标移动/悬停输入,当我移动时我可以看到某些 UI 的悬停状态。
我的问题是我错过了什么?游戏是否可以通过其他方式捕获输入?
谢谢。
【问题讨论】:
【参考方案1】:我可以想到应用程序仍可能接收鼠标输入的这些可能方式:
它重新启用原始输入通知 除您之外的子类窗口正在接收消息 正在轮询GetCursorPos
使用 Windows HID API 或其他用户模式界面访问鼠标设备
使用SetWindowsHookEx
挂钩鼠标事件或窗口消息
可能还有其他的,但目前我能想到的就这些了。
【讨论】:
听起来游戏可以创建另一个线程并轮询输入。有没有办法解决这个问题?除了 SuspendThread :-) 它不必创建另一个线程来使用GetCursorPos
。它可以在用于渲染的同一线程中每帧调用一次。
所以这发生在游戏循环中。你知道有什么方法可以禁用它吗?对我来说听起来不可能。
您可以挂钩 GetCursorPos
并让它返回一些其他值。如何做到这一点是另一个问题:***.com/questions/873658/…
好吧,这不是不可能的。但不是很实用,因为它需要替换系统 DLL。以上是关于注入DX游戏并使游戏空闲的主要内容,如果未能解决你的问题,请参考以下文章