AutoHotkey长按ESC定时关窗脚本切换窗口后关错目标窗口问题求助
问题原因
原代码存在两个核心错误导致关闭窗口错位:
- 触发长按逻辑时没有正确持久化存储目标窗口的唯一标识
- 最终执行关闭命令时调用了
A参数,指向命令执行时的当前激活窗口,而非触发时的窗口
修改后完整代码
$Escape:: ; 长按ESC(>0.5秒)触发关闭窗口逻辑,按住超过3.5秒可取消关闭 KeyWait, Escape, T0.5 ; 等待0.5秒检测是否为长按,同时抑制按键连发 If ErrorLevel ; 超时说明按键仍被按住,触发长按逻辑 { WinGet, targetWinID, ID, A ; 记录触发时的激活窗口唯一ID WinGetTitle, winTitle, ahk_id %targetWinID% ; 获取窗口标题用于提示 SplashTextOn,,150,,`n松开按键将在2秒后关闭 %winTitle%`n`n持续按住不放则取消关闭... KeyWait, Escape, T3 ; 再等待3秒检测是否松手 SplashTextOff If !ErrorLevel ; 3秒内松手,执行关闭逻辑 { sleep 2000 If WinExist("ahk_id " targetWinID) ; 先判断目标窗口是否还存在 PostMessage, 0x112, 0xF060,,, ahk_id %targetWinID% ; 关闭触发时记录的原窗口 Return } KeyWait, Escape ; 按住超过3秒,等待按键松开后不执行任何操作 Return } Send {Esc} ; 短按则正常发送ESC键 Return
关键调整说明
- 长按触发后第一时间获取当前激活窗口的唯一ID并存储,该ID不会随后续窗口切换变化
- 关闭窗口时直接指定存储的窗口ID,不再依赖当前激活窗口状态
- 新增窗口存在性判断,避免目标窗口已被手动关闭时产生无效操作
- 修复了原代码中提示文本引用未定义变量
%x%的错误,提示内容会正确显示待关闭窗口的标题
内容的提问来源于stack exchange,提问作者VeggieBot
相关产品推荐
相关产品推荐

