Autohotkey 当发送处于循环中时,热键不起作用

Autohotkey 当发送处于循环中时,热键不起作用,autohotkey,Autohotkey,假设此代码: Loop { if enabled Send, / } m:: enabled := !enabled Return 环 { 如果启用 送/ } m:: 已启用:=!启用 返回 例如,我想切换将/发送到记事本。但如果我通过在键盘上按M来运行此代码,则再次按M键不会禁用发送。 循环中的send命令似乎导致了此问题,因为我尝试使用了msgbox,它没有禁用m键。 如何使此代码正常工作?(SendInput和Play也不起作用)这是因为循环正在阻止任何其

假设此代码:

Loop { if enabled Send, / } m:: enabled := !enabled Return 环 { 如果启用 送/ } m:: 已启用:=!启用 返回 例如,我想切换将
/
发送到记事本。但如果我通过在键盘上按M来运行此代码,则再次按M键不会禁用发送。
循环中的
send
命令似乎导致了此问题,因为我尝试使用了
msgbox
,它没有禁用m键。

如何使此代码正常工作?(SendInput和Play也不起作用)

这是因为循环正在阻止任何其他执行。除非该循环是脚本中唯一的内容,否则您通常希望避免使用循环,而是使用

不要阻止进一步的执行,而是更像他们自己的线程。下面是一个使用计时器的示例:

slashTimerActive := 0

m::
    if (!slashTimerActive)
        SetTimer, SendSlash, 100 ; Call the sub every 100ms
    else
        SetTimer, SendSlash, Off

    slashTimerActive := !slashTimerActive ; Flip the variable
return

; Subroutine
SendSlash:
    SendInput, /
return

谢谢这很好,但是你知道我是一个表达式的粉丝,比如编码而不是命令行。。。set timer支持表达式吗?@TechLife恐怕我不明白你所说的“表达式式编码”是什么意思。我不知道你是否读过ahk帮助文件,但他说像
SubStr(“我在编写脚本,棒极了!”,16)
是一个表达式或函数,
StringReplace,Output,Input,AutoHotKey,AutoHotKey,所有
都是命令行编码。主要区别在于,在表达式中使用
:=
istead of
=
。但无论如何,我可以看到,
SetTimer
没有替代功能。谢谢你提供的代码。@TechLife啊,是的,有些是函数,有些是命令。有一些计时器函数,比如,但是除非您有一个真正特殊的用例,否则您通常可以使用普通的SetTimer命令。