Autohotkey,切换布尔值不起作用

Autohotkey, toggling a boolean doesn't work

我有一个模拟 Colemak 键盘布局的脚本。我希望能够使用 Win+Space

切换布局

脚本如下:

colemak = true

#If %colemak% = true
hotkeys...
#If

#Space::ChangeLayout()

ChangeLayout()
{
    colemak := !colemak
    if (colemak = false) {
        MsgBox Colemak deactivated.
    } else {
        MsgBox Colemak activated.
    }
}

当我按下 Win+Space 时,colemak 变量没有改变,它停留在 true。我在这里做错了什么?

另外,我想获得某种反馈,告诉用户布局已更改。 MsgBox 并不是我要找的东西,因为它需要用户按确定。我想要一个弹出窗口或类似的东西,它只是告诉用户它已更改,而无需或可能进行任何交互。有哪些可能性?

两件事:

  1. 为了声明变量,需要使用:=运算符。因此,您需要 colemak := true.

    而不是最初声明 colemak = true
  2. 函数ChangeLayout()有自己的作用域,其中全局变量colemak的初始声明是不可见的。为了解决这个问题,您需要通过在 colemak 前面添加 global 来使 colemak 成为“超级全局”变量。

最终代码:

global colemak := true

#If %colemak% = true
hotkeys...
#If

#Space::ChangeLayout()

ChangeLayout()
{
    colemak := !colemak
    if (colemak = false) {
        MsgBox Colemak deactivated.
    } else {
        MsgBox Colemak activated.
    }
}

Source