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.
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.
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?
MsgBox(0,"",myfunc(1,2)) ; Gibt 1+2 aus.
Func myfunc($add1,$add2)
Return $add1+$add2
EndFunc
Ist es in der Hilfe nicht ausführlich erklärt???
Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]Example1()
Example2()
; example1
Func Example1()
; Beispielskript mit drei benutzerdefinierten Funktionen
; Beachten sie die Nutzung von Variablen, ByRef und Return
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
Func Vertauschen(ByRef $a, ByRef $b) ; Vertauscht den Inhalt zweier Variablen
Local $t
$t = $a
$a = $b
$b = $t
EndFunc
Func Datum() ; Gibt das aktuelle Datum in der Form Tag.Monat.Jahr zurück.
return (@MDAY & "." & @MON & "." & @YEAR)
EndFunc
Func Groesser($x, $y) ; Gibt die größere von zwei Zahlen zurück.
If $x > $y Then
return $x
Else
return $y
EndIf
EndFunc
;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
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
Bsp.:
[autoit]MsgBox(0, '', _Repeat('a', 5))
MsgBox(0, '', _Repeat('a', 10))
MsgBox(0, '', _Repeat('a', 15))
Func _Repeat($string, $count)
Local $out = ''
For $i = 1 To $count
$out &= $string
Next
Return $out
EndFunc
Das in der Hilfe ist für recht neue Programmierer nicht gut verständlich.
Damit kannst du in der Funktion die Variablen verändern und die sind dann auch im Hauptprogramm geändert
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
#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
Du musst die Funktionen auch aufrufen, sonst werden sie nicht abgearbeitet.
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?
mit
[autoit]Return
[/autoit]thx, hat geklappt