Frage: Gloabal

  • Mein kleines Script, um zu verhindern das man AFK in Spielen geht.

    Das Script an sich ist aber nicht wichtig.
    Viel wichtiger:

    Ohne "Global $variable" funktionieren die Hotkeys nicht, obwohl die Variable sonst nirgends genutzt oder zugeordnet wird.

    Was hat es mit dem Global Befehl aufsich?
    (Noob-Gerecht bitte. ;))

    [autoit]

    ;Variablen
    $text = InputBox("The Message", "Please enter the message you want to sent. Example: /w [myself] No Idling!")
    $i = 0

    [/autoit][autoit][/autoit][autoit]

    ;Hotkeys
    Global $hotkey
    HotKeySet("{ESC}", "Terminate")

    [/autoit][autoit][/autoit][autoit]

    ;Schleife
    while $i < 1
    Sleep(2000)
    Send("{ENTER}")
    Send("" & $text)
    Send("{ENTER}")
    WEnd

    [/autoit][autoit][/autoit][autoit]

    ;Exit-Funktion
    Func Terminate()
    Exit 0
    EndFunc

    [/autoit]
  • Hi,

    das Problem ist, dass man mit HotKeySet() keine Parameter an die zu aufrufende Funktion übergeben kann. Somit müssen die Variablen/Konstanten, die in der entsprechenden Funktion verwendet werden global deklariert werden. Das erreicht man durch das Schlüsselwort Global, womit die Variable/Konstante im global scope erschaffen wird und von überall im Skript angesprochen werden kann.

    Wenn Du aber eine Variable außerhalb einer Funktion deklarierst, so ist sie IMMER global, da bringt auch kein Local was. (Dim vergessen wir komplett!)
    Mach mal Opt("MustDeclareVars", 1) oben in Deinem Skript. Dadurch wird die Sache schon um einiges sauberer!

    Wo ist denn das Problem bei Deinem Skript!? Du brauchst doch nur eine Konstante:

    Spoiler anzeigen
    [autoit]

    Opt("MustDeclareVars", 1)
    HotKeySet("{ESC}", "OnAutoItExit")

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $S_TEXT = InputBox("The Message", "Please enter the message you want to sent. Example: /w [myself] No Idling!")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(2000)
    Send("{ENTER}")
    Send("" & $S_TEXT)
    Send("{ENTER}")
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItExit()
    Exit (0)
    EndFunc ;==>OnAutoItExit

    [/autoit]

    PS: Bitte in Zukunft Spoiler und AutoIt-Codes verwenden!!!

    Einmal editiert, zuletzt von teh_hahn (2. August 2007 um 23:13)