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

OPスクリプトのコードは最初にリターンをヒットし、変数を宣言することはありません

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

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

コメントの1つでこの情報を確認しましたが、自分でそれを理解するためにさらに1時間費やすまで表示されなかったため、これを回答として提供したかっただけです。これは私が必要とした答えなので、実際に目立つ答えとして持つことは、他の誰かが時間を節約するのに役立つかもしれません。

于 2014-06-10T14:39:10.967 に答える
3

特に、同じ変数にアクセスする必要のある複数のスクリプトを実行していることがあるため、私が行ったことは、変数を.iniファイルに配置することです。また、これを使用して、再起動後に変数値を保持します。データがハードディスク/SSDに保存されるため、ソリューションはやや遅くなりますが、うまく機能します。

グループ「Finish」の変数「State」に値「S」を書き込む例

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
于 2012-10-12T08:00:04.693 に答える