首页 > 解决方案 > Autohotkey,切换布尔值不起作用

问题描述

我有一个应该模拟 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 并不是我真正要寻找的东西,因为它需要用户按确定。我想要一个弹出窗口或类似的东西,它只是告诉用户它在不需要或可能进行任何交互的情况下发生了变化。有哪些可能性?

标签: autohotkey

解决方案


两件事情:

  1. 为了声明一个变量,你需要使用:=操作符。因此,您不需要最初声明colemak = true,而是需要colemak := true.

  2. 该函数ChangeLayout()有自己的作用域,其中全局变量的初始声明colemak是不可见的。为了解决这个问题,你需要在它前面colemak添加一个“超级全局”变量。global

最终代码:

global colemak := true

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

#Space::ChangeLayout()

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

来源


推荐阅读