将保持按钮变成切换按钮的 AHK 脚本

AHK script to turn hold buttons into toggle buttons

例如,当您按住 Shift 按钮时,它会变成大写,而 Capslock 按钮会做同样的事情,但作为切换按钮。

如何将 shift 按钮等保持按钮变为大写锁定按钮等切换按钮?

我试过这个:

   if toggle
        Send, {LShift down}
    else
        Send, {LShift up}

LShift::
    toggle := !toggle
    return

但由于某种原因它不起作用。 我认为它会根据 LShift 按钮更改的切换值抬起或按住 LShift 按钮。但是不行,从来就不是大写字母

我突然想到的第一件事是,您的 If 语句位于代码的 Autoexec 部分,不包含在任何将被多次调用或执行的内容中,因此它只检查一次切换状态,您可以一整天都按 LShift 并更改 Toggle,但不会从那里生成任何代码。

首先我想将您的代码移至热键部分。虽然这个半工作我无法产生一致的结果,请随意尝试:

LShift::
    toggle := !toggle 
    if (toggle = true) ; added this for clarity and consitency
        Send, {LShift down}
    else
        Send, {LShift up}
    return

下面是我过去使用过的解决方案,当我记得它时,它起作用的原因是 SetTimer 可以被热键中断,所以无论 Timer 例程在哪里工作,热键都会中断它并设置切换.

解决方案:

SetTimer, Toggler, 100 

$LShift::toggle := !toggle

Toggler: 
    if (toggle = true)
        Send, {LShift down}
    else
        Send, {LShift up}
Return