4

我在 sof 上看到过类似的主题,但它的解决方案对我没有帮助。这让我心烦意乱,基本上我想要的只是有一些方法来访问和修改一个值,该值将通过我的单个 .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}

}

}

我知道上面是不正确的,我试图在我的函数中使用“全局”,但我无法得到我想要的效果。

4

3 回答 3

4

使用“全局”应该可以。就像是:

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

这将 shot() 函数中的“var”变量指向函数外部定义的现有“var”变量。

于 2012-10-12T00:41:37.473 回答
4

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

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

var := "1"

XButton1::
     ; code...
return

OPs 脚本中的代码将首先返回并且从不声明变量

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

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

我只是想提供这个作为答案,因为虽然我确实在其中一个评论中看到了这些信息,但直到我自己又花了一个小时弄清楚之后才看到它。由于这是我需要的答案,因此将其作为实际突出的答案可能会帮助其他人节省时间。

于 2014-06-10T14:39:10.967 回答
3

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

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

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

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

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

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

If (MyLoop := !MyLoop) ; Toggle the variable "MyLoop" True/False
{
    Do something
}
Else
{
    Do something else
}
return
于 2012-10-12T08:00:04.693 回答