【问题标题】:AHK script to turn hold buttons into toggle buttonsAHK 脚本将保持按钮变成切换按钮
【发布时间】:2015-10-14 10:45:11
【问题描述】:

例如,当你按住 Shift 按钮时,它会变成大写字母,而 Capslock 按钮做同样的事情,只是作为一个切换按钮。

如何将按住按钮(如 shift 按钮)作为切换按钮(如 capslock 按钮)?

我试过这个:

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

LShift::
    toggle := !toggle
    return

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

【问题讨论】:

    标签: autohotkey


    【解决方案1】:

    我首先想到的是,您的 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
    

    【讨论】:

    • 谢谢!您能否还解释一下为什么我尝试的方法不起作用
    • 哦,好吧,这是有道理的,所以它只发生了一次,如果我在顶部的部分周围包含一个 while 循环,它会起作用吗?喜欢while true?
    • 有可能,通常有多种解决方案可以解决您在编码中遇到的每个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2014-06-01
    • 1970-01-01
    相关资源
    最近更新 更多