Variables 可由不同宏访问和修改的自动热键全局变量?

Variables 可由不同宏访问和修改的自动热键全局变量?,variables,global-variables,autohotkey,Variables,Global Variables,Autohotkey,我在sof上看到过类似的话题,但它的解决方案对我没有帮助。这让我心神不宁,基本上我想要的就是有一些方法来访问和修改一个值,该值将在我的单个.ahk文件中的宏中保持其上次更改的状态 参见下面的示例 ~Home::Suspend XButton1:: tog() return LButton:: shot() return var := "1" tog(){ var *= -1 } shot(){ If (var = "1") { Loop, 1 {

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

}

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

使用“全局”应该可以。比如:

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

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

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

将值“S”写入组“Finish”中变量“State”的示例

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

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

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

我也有同样的问题,经过一些尝试和错误后,我发现我的错误与提供的代码中的错误相同:

声明全局函数的正确方法是先声明其他函数

var := "1"

XButton1::
     ; code...
return
OPs脚本中的代码将首先命中返回,并且从不声明变量

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

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

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

嗯,我试过了,但它不起作用。。。也许你可以试试?让我知道它是否有效,我将知道问题是否出在我问题中的代码有
var:=“1”
,在
返回后它将永远不会执行,因此变量最初将为空。这个答案展示了在函数中声明全局变量的正确方法。这对我来说是有效的。我丢失了“全局”关键字。谢谢你,ini文件对我来说应该很好,因为我不会担心速度。还感谢您提供的切换提示。请记住,在
返回后执行
#include
也有相同的效果。第二个文件将被包含,就好像代码是在该位置编写的一样,但不会声明变量。可能是重复的
var := "1"

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

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