AutoHotKey全局变量,可以通过不同的宏访问和修改?

时间:2012-10-11 23:54:48

标签: variables global-variables autohotkey

我在沙发上看过类似的话题,但它的解决方案并没有帮助我。这是我的想法,基本上我想要的是有一些方法来访问和修改一个值,通过我的单个.ahk文件中的宏来维持其上次更改状态。

见下面的例子,

~Home::Suspend

XButton1::

tog()

return

LButton::

shot()

return



var := "1"

tog(){
var *= -1
}

shot(){

If (var = "1") {

    Loop, 1 {

        Send {k}
        Sleep 65
        Send {WheelDown}
        Sleep 100
        Send {WheelUP}
        Sleep 10

    }

} Else {

    Send {k}

}

}

我知道上面的内容不正确,我试图在我的函数中使用“global”但是我无法达到预期的效果。

3 个答案:

答案 0 :(得分:4)

使用"全球"应该管用。类似的东西:

shot(){
    global var
    If (var = "1") {

指出' var' shot()函数中的变量到现有的' var'在函数外定义的变量。

答案 1 :(得分:4)

我遇到了同样的问题,经过一些反复试验后,我发现了我的错误,与提供的代码相同:

声明全局的正确方法是在其他函数之前

var := "1"

XButton1::
     ; code...
return

OPs脚本中的代码将首先点击返回,并且永远不会声明变量

XButton1::
   ; code...
return     ; Returns Here

var := "1" ; Incorrect Will Not Be Declared

我只是想提供这个作为答案,因为虽然我在其中一条评论中看到了这些信息,但直到我已经花了一个多小时来自己搞清楚之后才看到它。由于这是我需要的答案,将其作为一个真正突出的答案可以帮助其他人节省时间。

答案 2 :(得分:3)

我所做的,特别是因为我有时需要运行多个需要访问同一变量的脚本,所以将var放在.ini文件中。我还使用它来在重新启动后保留变量值。由于数据保存到硬盘/ SSD,解决方案有点慢,但效果很好。

在“完成”组中将值“S”写入变量“State”的示例

IniWrite, S, C:\2Podcasts\FinishOptions.ini, Finish, State

在另一个脚本(其他AutoHotKey实例)中,我读取了值并将其分配给变量“FinishOption”。

IniRead, FinishOption, C:\2Podcasts\FinishOptions.ini, Finish, State

如果要切换值(True / False),可以使用它。这将对变量的当前值执行IF并将变量设置为相反的值。

If (MyLoop := !MyLoop) ; Toggle the variable "MyLoop" True/False
{
    Do something
}
Else
{
    Do something else
}
return