2015-10-14 321 views
1

例如,按住Shift按钮可以使事物在您按住时保持不变,而Capslock按钮可以做同样的事情,但可以切换。AHK脚本将按住按钮转换到切换按钮

如何将一个保持按钮(如shift按钮)像一个切换按钮一样操作,就像大写锁定按钮一样?

我已经试过这样:

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

LShift:: 
    toggle := !toggle 
    return 

但它并不适用于某些原因。 我认为它会抬起或按住LShift按钮,具体取决于由LShift按钮更改的切换值。但它不起作用,它从来不是大写字母。

回答

1

首先向我弹出的是,您的If语句位于代码的Autoexec部分,并且不包含在任何将被调用或执行多次的任何内容中,因此它只检查切换状态一次,您可以点击LShift和更改切换整天,但没有代码会从那里发生。

首先我想将您的代码移到热键部分。虽然这半工作,我没能产生一致的结果,随意尝试自己:

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 
+0

谢谢!请你也可以添加一个解释,说明为什么我试过的东西没有工作 – Aequitas

+0

哦,好吧,这是有道理的,所以它只发生过一次,如果我已经在顶部的部分包含了一个while循环,它会工作吗?像'而真'? – Aequitas

+0

有可能,通常有多种解决方案可以解决您在编码时遇到的每个问题。 – errorseven