AutoHotKey向非活动Minecraft窗口发按键触发ESC问题求解
首先你触发ESC菜单的直接原因是当前代码中主动调用了两次ControlSend发送Esc按键的按下、抬起指令,你误以为后台发按键前需要先通过Esc唤醒窗口,这个操作是完全多余的。
针对你要实现的后台发送W按键的需求,调整方案如下:
核心优化点
- 不要发送多余的Esc指令
- 无需抓取Minecraft的子控件,Minecraft是单控件独占输入的游戏,
ControlSend第一个控件参数直接留空即可 - 改用窗口唯一ID标识目标窗口,比直接匹配窗口标题兼容性更强
- 提前关闭Minecraft内置的「失去焦点时暂停」设置,否则游戏后台不会响应任何输入
修正后完整代码
#NoEnv SendMode Event SetWorkingDir %A_ScriptDir% #SingleInstance Force SetKeyDelay, 10, 10 ; 适配游戏对按键输入间隔的要求,避免识别失效 F6:: ; 按下F6时将当前激活的窗口绑定为目标MC窗口 WinGet, MC_WinID, ID, A return F7:: ; 后台发送W按下指令 ControlSend,, {w Down}, ahk_id %MC_WinID% return F8:: ; 后台发送W抬起指令 ControlSend,, {w Up}, ahk_id %MC_WinID% return
额外兼容方案
如果上述代码仍无法正常触发输入,可做如下调整:
- 将Minecraft从全屏模式切换为无边框窗口模式,降低游戏对后台输入的屏蔽等级
- 如果使用了Forge/Fabric等模组端,可移除任何带反作弊功能的模组,部分反作弊会拦截非前台窗口的输入指令
内容的提问来源于stack exchange,提问作者SpaceBroetchen
相关产品推荐
相关产品推荐

