You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何循环AutoHotkey脚本:实现按住Q加其他键交替执行需求

AutoHotkey脚本问题:无法实现Q与指定键的交替循环输入

问题描述

需求:编写AutoHotkey脚本,实现按住Q键时将鼠标移至屏幕中心,之后按下W、D、Z等指定键,需循环执行Q与该键的组合(如qwqwqw)。

现有脚本运行后,鼠标可正常移至屏幕中心,但按下W键时仅连续输入W,无法实现Q与W的交替循环。

现有代码

#NoEnv
#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%

q::
CoordMode, Mouse, Screen
SysGet, screenWidth, 0
SysGet, screenHeight, 1
MouseMove, screenWidth/2, screenHeight/2
Loop
{
    SendInput, q
    Input, key, V L1 M
    if ErrorLevel
        break
    if (key = "w" or key = "d" or key = "z")
    {
        SendInput, %key%
        Loop
        {
            Input, key, V L1 M
            if (ErrorLevel or key != A_ThisHotkey)
                break
            SendInput, %key%
            SendInput, q
        }
    }
}
return

问题分析

现有代码的核心逻辑错误在于依赖Input命令等待手动按键输入,而非自动循环发送指定组合:

  1. 首次按下Q后,脚本发送Q并等待手动输入下一个键,完全不符合“自动循环”的需求;
  2. 内部循环的判断逻辑混乱,仅在手动按下Q时才会发送对应组合,无法实现自动交替输出。

修正后的代码

以下脚本实现:按下Q键触发鼠标移至屏幕中心,之后按住W/D/Z任意一键时,自动循环发送Q+对应键的组合,松开按键即停止循环。

#NoEnv
#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%
CoordMode, Mouse, Screen

; 按下Q键时移动鼠标到屏幕中心,并启用循环热键
q::
SysGet, screenWidth, 0
SysGet, screenHeight, 1
MouseMove, screenWidth/2, screenHeight/2
; 启用W/D/Z的循环热键
Hotkey, w, StartLoop, On
Hotkey, d, StartLoop, On
Hotkey, z, StartLoop, On
return

; 松开Q键时禁用循环热键(可选,根据需求调整)
q up::
Hotkey, w, StartLoop, Off
Hotkey, d, StartLoop, Off
Hotkey, z, StartLoop, Off
return

; 循环发送Q与指定键的组合
StartLoop:
targetKey := SubStr(A_ThisHotkey, 2) ; 获取当前触发的按键(w/d/z)
Loop
{
    SendInput, q%targetKey%
    Sleep, 50 ; 调整循环间隔,可根据需求修改
    ; 检查按键是否仍被按住,松开则停止循环
    GetKeyState, keyState, %targetKey%, P
    if (keyState = "U")
        break
}
return

代码说明

  • 按下Q键时,先将鼠标移至屏幕中心,同时启用W/D/Z的热键监听;
  • 按住W/D/Z任意一键时,自动循环发送Q+对应键的组合,循环间隔可通过Sleep值调整;
  • 松开W/D/Z按键时,立即停止循环;
  • 松开Q键时会禁用W/D/Z的循环热键(若需要保持热键可用,可删除q up::部分)。

内容的提问来源于stack exchange,提问作者Mike Osborn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:43:24