【问题标题】:Auto Hotkey Asynchronous Loop自动热键异步循环
【发布时间】:2021-01-31 01:07:29
【问题描述】:

这是我的代码:

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”,循环不会停止

【问题讨论】:

  • 循环中没有任何键。我错了吗?
  • 循环检查toogle变量,如果我再次按z,toogle变量会变为假

标签: loops asynchronous autohotkey


【解决方案1】:

:= (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

【讨论】:

  • 谢谢,我稍后检查它我从其他地方复制了循环,因为我不熟悉 ahk 并且没有找到更好的东西
猜你喜欢
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
相关资源
最近更新 更多