Funktionen

  • Hallo,
    könnte mir jemand verständlich erklären, wie man Funktionen einsetzt? Func irgendwas() EndFunc
    Sind die nur dazu da, um das Script übersichtlich zu halten, oder erfüllen die noch irgendeinen Zweck?

    Danke für Antworten. :)

  • Du kannst damit Codezeilen die du immerwieder brauchst darein schreiben und musst sie dann nicht neu kopieren/schreiben sondern schreibst einmal meinefunc() nd fertig.

    ok, das geht ja dann wohl über Variablen. Kannst du vllt. mal ein Beispiel posten?

  • Ist es in der Hilfe nicht ausführlich erklärt???

    Spoiler anzeigen
    [autoit]

    Opt('MustDeclareVars', 1)

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

    Example1()
    Example2()

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

    ; example1
    Func Example1()
    ; Beispielskript mit drei benutzerdefinierten Funktionen
    ; Beachten sie die Nutzung von Variablen, ByRef und Return

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

    Local $foo = 2
    Local $bar = 5
    MsgBox(0,"Heute ist der " & Datum(), "$foo hat den Wert " & $foo)
    Vertauschen($foo, $bar)
    MsgBox(0,"Nach dem Tausch von $foo und $bar", "enthält $foo jetzt " & $foo)
    MsgBox(0,"Zum Schluss", "Der größere Wert von 3 und 4 ist " & Groesser(3,4))
    EndFunc ;==>Example1

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

    Func Vertauschen(ByRef $a, ByRef $b) ; Vertauscht den Inhalt zweier Variablen
    Local $t
    $t = $a
    $a = $b
    $b = $t
    EndFunc

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

    Func Datum() ; Gibt das aktuelle Datum in der Form Tag.Monat.Jahr zurück.
    return (@MDAY & "." & @MON & "." & @YEAR)
    EndFunc

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

    Func Groesser($x, $y) ; Gibt die größere von zwei Zahlen zurück.
    If $x > $y Then
    return $x
    Else
    return $y
    EndIf
    EndFunc

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

    ;Ende des Beispielskripts 1

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

    ; example2
    Func Example2()
    ; Dieses Beispielskript verwendet @NumParams Makros
    Test_Numparams(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
    EndFunc ;==>Example2

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

    Func Test_Numparams($v1 = 0, $v2 = 0, $v3 = 0, $v4 = 0, $v5 = 0, $v6 = 0, $v7 = 0, $v8 = 0, $v9 = 0, _
    $v10 = 0, $v11 = 0, $v12 = 0, $v13 = 0, $v14 = 0, $v15 = 0, $v16 = 0, $v17 = 0, $v18 = 0, $v19 = 0)
    Local $val
    For $i = 1 To @NumParams
    $val &= Eval("v" & $i) & " "
    Next
    MsgBox(0, "@NumParams Beispiel", "@NumParams =" & @NumParams & @CRLF & @CRLF & $val)
    EndFunc

    ;Ende des Beispielskripts 2

    [/autoit]
  • Habe hier mal was geschrieben und rumprobiert, funktioniert aber leider nicht, habs mit globalen Variablen versucht geht nicht. Ist jetzt nur ein Beispielcode. Habe einfach mal wird drauf los gecodet. Seitdem ich aber nun die Funktionen benutzt hab gehts nicht mehr :( Das Ziel ist es, dass die Auswahl der Sprache in der Registry gespeichert wird, und nach jedem Start des Programmes automatisch die zuvor gewählte Sprache anzeigt:

    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0

    Author: videotuner

    Script Function:
    superprog

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

    #ce ----------------------------------------------------------------------------

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

    Func German($german)
    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\superprog", "superprogKeyGerman") Then
    MsgBox(64, "superprog" , "Willkommen zurück")
    EndIf
    EndFunc
    Func start($input)
    Local $Input, $else
    $input = InputBox("superprog" , "Please choose your Language, type in GERMAN for german, or ENGLISH for english")
    $languageerror = "You´ve selected an undefined language"
    $Progname = "superprog"
    If $Input = "GERMAN" Then
    $notAdmin = "Achtung: Dieses Programm benötigt admin rechte"
    $regMSG = "Es werden jetzt einige Grundinformationen in der Registry gespeichert."
    $keygranted = "Eintrag erfolgreich in die Registry geschrieben"
    $regerror = "Ein Fehler ist augetreten. Der Eintrag konnte nicht geschrieben werden. Überprüfen sie bitte die Rechte zur Registry"
    EndIf
    If $Input = "ENGLISH" Then
    $notAdmin = "Attencion: This Program is required Admin previlegs"
    EndIf
    If Not IsAdmin() Then
    MsgBox(16, $Progname , $notAdmin )
    Exit
    EndIf
    EndFunc
    Switch $Input
    Case "GERMAN"

    $German = MsgBox(64, $Progname, "test")

    If Not RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\superprog", "superprogKeyGerman") Then
    MsgBox(64, $Progname , $regMSG )
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\superprog", "superprogKeyGerman", "REG_SZ", "superprogKeyGerman")
    MsgBox(64, $Progname, $keygranted )
    EndIf
    If Not RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\superprog", "superprogKeyGerman", "REG_SZ", "superprogKeyGerman") Then
    MsgBox(16, $Progname, $regerror )
    EndIf
    Case "ENGLISH"

    Case Else
    $else = MsgBox(64, $Progname , $languageerror )
    EndSwitch

    [/autoit]
  • Ok, das mit den Funktionen hab ich jetzt verstanden. Aber wie komm ich aus einer Funktion raus bevor sie komplett abgearbeitet ist, zb. bei einem Errorevent?