AHK v2游戏自动Farming脚本启动即关闭及窗口ID问题求助
问题修复方案
核心问题分析与修复
1. 脚本启动后立即关闭
原脚本开头存在一个立即执行的代码块,其中的return会直接终止主脚本的执行流程,导致脚本启动后立刻退出。只需移除这个多余的代码块,脚本就能正常进入消息循环保持运行。
2. 窗口ID使用错误
AHK v2中,定位窗口必须使用"ahk_id " 窗口ID的字符串格式,直接传入数字ID无法被识别。原脚本里直接用id作为窗口参数,同时错误沿用v1的ahk_id %id%写法,导致无法正确定位目标窗口。正确写法是通过字符串拼接生成窗口标识:"ahk_id " id。
修复后的完整脚本
#Requires AutoHotkey v2.0 SetTitleMatchMode 2 #SingleInstance Force id := 0 ; 绑定热键:Ctrl+Alt+W 选择目标窗口 Hotkey "!^w", SelectWindow Hotkey "f24", rel Hotkey "f20", wgar Hotkey "f21", fsug Hotkey "f22", fpum Hotkey "f13", wda Hotkey "f14", wcas Hotkey "f15", whub Hotkey "f23", fcho SelectWindow() { global id MouseGetPos , , &id, &control ToolTip "已选择窗口,ID: " id SetTimer ToolTip, -1000 } rel() { global id ControlClick "Left",, "ahk_id " id,,, "NAU" ControlClick "Middle",, "ahk_id " id,,, "NAU" ControlSend "{a up}{s up}{d up}{w up}",, "ahk_id " id Reload } fsug() { global id ControlSend "t",, "ahk_id " id Sleep 100 ControlSend "{NumpadDiv}warp garden{Enter}1",, "ahk_id " id Sleep 100 ControlClick "Left",, "ahk_id " id,,, "NAD" Loop 15 { ControlSend "{a down}",, "ahk_id " id Sleep 47750 ControlSend "{a up}{s down}",, "ahk_id " id Sleep 47750 ControlSend "{s up}",, "ahk_id " id } ControlSend "{d down}",, "ahk_id " id Sleep 9500 ControlClick "Left",, "ahk_id " id,,, "NAU" ControlSend "{d up}",, "ahk_id " id } wgar() { global id ControlSend "t",, "ahk_id " id Sleep 100 ControlSend "{NumpadDiv}warp garden{Enter}1",, "ahk_id " id } fpum() { global id ControlSend "t",, "ahk_id " id Sleep 100 ControlSend "{NumpadDiv}warp garden{Enter}1",, "ahk_id " id Sleep 100 Loop 2 { ControlClick "Left",, "ahk_id " id,,, "NAD" ControlSend "{w down}",, "ahk_id " id Loop 6 { ControlSend "{a down}",, "ahk_id " id Sleep 72500 ControlSend "{a up}{d down}",, "ahk_id " id Sleep 72500 ControlSend "{d up}",, "ahk_id " id } ControlClick "Left",, "ahk_id " id,,, "NAU" ControlSend "{w up}t",, "ahk_id " id Sleep 100 ControlSend "{NumpadDiv}warp garden{Enter}1",, "ahk_id " id Sleep 100 } } wda() { global id ControlSend "t",, "ahk_id " id Sleep 100 ControlSend "{NumpadDiv}warp da{Enter}",, "ahk_id " id } wcas() { global id ControlSend "t",, "ahk_id " id Sleep 100 ControlSend "{NumpadDiv}warp castle{Enter}",, "ahk_id " id } whub() { global id ControlSend "t",, "ahk_id " id Sleep 100 ControlSend "{NumpadDiv}warp hub{Enter}",, "ahk_id " id } fcho() { global id Loop { ControlClick "Middle",, "ahk_id " id,,, "NAD" Sleep 3 ControlClick "Middle",, "ahk_id " id,,, "NAU" Sleep 3 } }
额外优化说明
- 将原标签式子程序改为函数形式,符合AHK v2的最佳实践
- 在
SelectWindow函数中添加了ToolTip提示,方便确认窗口选择成功 - 移除了所有冗余的
return(函数执行完毕自动返回,无需额外return)
内容的提问来源于stack exchange,提问作者Almie
相关产品推荐
相关产品推荐

