2012-10-11 45 views
3

我在sof上看到過類似的話題,但它的解決方案並沒有幫助我。這正在勾起我的想法,基本上我想要的是有一些方法來訪問和修改一個值,該值將通過我的單個.ahk文件中的宏保持其上次更改的狀態。AutoHotKey全局變量可以被不同的宏訪問和修改嗎?

參見下面的例子,

~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} 

} 

} 

我知道上面是不正確的,我試圖用「全局」在我的功能,但我不能讓我的預期效果。

+0

可能重複的[全局變量不具有全球範圍](https://stackoverflow.com/questions/10198900/global-variable-does-not-have-global-scope) –

回答

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 
+1

感謝人ini文件應該適合我,因爲我不會關心速度。也感謝您的建議。 – matiszac

4

使用「全球」應該工作。例如:

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

將shot()函數中的'var'變量指向在函數外定義的現有'var'變量。

+0

HMM我試過,但它沒有工作...也許你嘗試它?讓我知道,如果它運作如此糟糕知道問題是我 – matiszac

+1

問題中的代碼有'var:=「1」'它將永遠不會執行 - * * * return之後* - 因此變量將初始爲空。這個答案顯示了在函數中聲明全局變量的正確方法。 – Lexikos

+0

這是我的工作。我錯過了'全球'關鍵字。 –

3

我有同樣的問題和一些試驗和錯誤之後,我發現我的錯誤,是一樣的,在提供的代碼:

聲明一個全局正確的方法是先於其他功能

var := "1" 

XButton1:: 
    ; code... 
return 

在OPS腳本將先打回報,永不代碼聲明變量

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

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

我只是想提供這個答案,因爲雖然我在其中一個評論中看到了這些信息,但是直到我已經花了一個小時的時間才發現它,我才發現它。由於這是我需要的答案,因此將其作爲實際突出的答案可能會幫助其他人節省時間。

+0

另外請記住,在'return'後面執行'#include'具有相同的效果。第二個文件將被包含,就像代碼被寫入該位置一樣,但varials不會被聲明。 –