自动热键异步循环

时间:2020-10-16 13:40:25

标签: loops asynchronous autohotkey

这是我的代码:

toggle:=0

z::
    if GetKeyState("LButton") {
    toggle:= 0
        Send % "{Click Up}"
    Send % "{w Up}"
    Send % "{Ctrl Up}"
        BlockInput, MouseMoveOff
    } else {
        Send % "{Click Down}"
    Send % "{w Down}"
    Send % "{Ctrl Down}"
        BlockInput, MouseMove
    toggle := 1
    If (toggle := 1) 
            SetTimer, loop, -1 
        }
return

loop:
while (toogle := 1) {
    MouseMove, 50, 0, R
    MouseMove, -50, 0, R
    Sleep, 700 
}
return

按“左键单击”,“ w”和“ ctrl” 如果再次按下“ z”,则将其释放

循环应使鼠标每隔1秒左移一次,然后将同样的量向右移

但这不起作用

如果我按“ z”,循环不会停止

1 个答案:

答案 0 :(得分:0)

:= (docs) 用于分配表达式的结果,而不是比较值。
使用= or ==运算符进行比较。
或者,当您只是在检查真/假值时,
(toggle = 1)(toggle)
(toggle = 0)(!toggle)相同。

您在while循环中还拼错了toggle
这是固定的 代码(逻辑上似乎仍然很不完善)。
但是也许当脚本错误消失后,您现在可以修复逻辑。

z::
    if (GetKeyState("LButton"))
    {
        toggle := 0
        Send % "{Click Up}"
        Send % "{w Up}"
        Send % "{Ctrl Up}"
        BlockInput, MouseMoveOff
    } 
    else 
    {
        Send % "{Click Down}"
        Send % "{w Down}"
        Send % "{Ctrl Down}"
        BlockInput, MouseMove
        toggle := 1
        
        ;this check will never be false because literally right above you set the value?
        if (toggle) 
            SetTimer, loop, -1 
    }
return

loop:
    while (toggle) 
    {
        MouseMove, 50, 0, R
        MouseMove, -50, 0, R
        Sleep, 700 
    }
return
相关问题