如何编写Python脚本录制原神等游戏的键鼠输入 解决游戏运行时无法录制问题
问题解答:PC游戏键鼠操作录制失效问题
项目前置必备知识
- Windows输入机制基础:需要了解应用层输入、系统级输入的差异,熟悉Windows消息队列、
SendInputAPI、DirectInput、Raw Input等核心概念,普通Python输入库大多基于应用层消息监听实现,适用场景有限。 - 系统权限相关知识:了解Windows UAC权限体系、管理员权限、普通用户权限、内核级进程的权限差异,多数游戏的运行权限高于普通脚本进程。
- 反作弊机制常识:主流联机游戏搭载的EAC、BattlEye、VAC等反作弊系统,都会默认拦截未授信第三方进程的输入读取、注入行为,避免外挂操作。
- 输入录制逻辑差异:区分全局输入监听、前台窗口输入监听的实现区别,以及硬件级输入、系统模拟输入的捕获逻辑差异。
问题成因
你猜测的安全检测是核心原因之一,还有两类常见诱因:
- 反作弊机制拦截:带反作弊的游戏会Hook系统输入API,阻止未签名、非授信的第三方进程读取游戏窗口内的输入事件,
keyboard、pyautogui这类应用层库的输入监听行为会被直接屏蔽。 - 权限层级不足:默认运行的Python脚本是普通用户权限,很多游戏运行时会申请管理员权限,低权限进程无法读取高权限进程的输入事件。
- 游戏独占输入模式:多数3D游戏会采用DirectInput、Raw Input模式独占输入,绕过普通的Windows窗口消息队列,仅监听窗口消息的输入库自然无法捕获到对应操作。
解决方案
- 基础权限调整:右键点击运行脚本的终端/ Python解释器,选择以管理员身份运行后再执行脚本,无反作弊的单机游戏基本可以通过该方法解决问题。
- 替换底层监听库:放弃应用层的
keyboard、pyautogui,改用全局监听兼容性更好的pynput库,或者通过ctypes直接调用Windows原生的GetAsyncKeyState、SendInput等底层API实现输入捕获。 - 驱动级适配(高门槛):如果需要适配带反作弊的游戏,需要开发内核级驱动实现输入捕获,注意未签名驱动大概率会被反作弊检测到,甚至触发封号处罚,不建议用于联机游戏场景。
风险提示:所有第三方输入录制、模拟工具用于联机游戏都存在被判定为外挂的风险,仅建议在单机离线场景使用。
内容的提问来源于stack exchange,提问作者Swnoob
相关产品推荐
相关产品推荐

