AutoHotKey全局变量,可由不同的宏访问和修改



我在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}
}
}

我知道上述内容不正确,我尝试在我的函数中使用"全局",但我无法获得我想要的效果。

使用"global"应该有效。 像这样:

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

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

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

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

var := "1"
XButton1::
     ; code...
return

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

XButton1::
   ; code...
return     ; Returns Here
var := "1" ; Incorrect Will Not Be Declared

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

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

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

IniWrite, S, C:2PodcastsFinishOptions.ini, Finish, State

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

IniRead, FinishOption, C:2PodcastsFinishOptions.ini, Finish, State

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

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

相关内容

  • 没有找到相关文章

最新更新