Schleife mit Variabler

  • Hay,
    Ich habe heute (bzw gestern, ist ja schon so spät ;D) angefangen mal ein wenig mit AutoIT zu scripten und bin bei etwas hängen geblieben
    Was das Ganze wird weiß ich noch nicht ganz aber ich wollte eine Schleife einbauen, die wenn man vorher in einer InputBox eine Zahl schreibt, genau diese anzahl an schleifen wiederhold.
    Hier mein bisheriger Code:


    Case $Button3 $Anzahl= InputBox("Beispiel", "Gebe hier die Anzahl der wiederholungen ein")

    wenn ich jetzt 10eingeben würde soll das Script den Befehl 10x ausführen, so dass ich zum Beispiel

    Sleep (10)Send ("Hallo")

    stehen habe und dies nunmal zehnmal ausgeführt wird.
    Das selbe soll natürlich mit allen Zahlen gehen also auch 50,34 oder 10000
    Ist dies überhaupt in AutoIT möglich? und wenn ja wie? Lässt sich vllt sogar noch eine Sperre einbauen die verhindert dass man Buchstaben reinschreibt
    Meinetwegen könnte man das ganze auch mit einem normalen Input machen aber bei mir gab es dort immer das Problem dass als Variable 3 Angezeigt wurde...
    Ich danke euch schonmal im vorraus für eure Hilfe.

    PS: Ich habe selbstverständlich gegoogelt aber auf den ersten und zweiten blick nichts (für mich) verständliches gefunden :(

    Mfg Creolo

  • wenn ich jetzt 10eingeben würde soll das Script den Befehl 10x ausführen

    [autoit]

    For $n = 1 To Number($Anzahl)
    ; ...
    Next

    [/autoit]

    Lässt sich vllt sogar noch eine Sperre einbauen die verhindert dass man Buchstaben reinschreibt

    Number sollte in so einem Fall 0 zurückgeben, und eine Schleife von 1 bis 0 wird 0x ausgeführt. Wenn du ein Input (in einer GUI) verwendest kannst du als Style $ES_NUMBER angeben, das macht genau was du willst.

    Meinetwegen könnte man das ganze auch mit einem normalen Input machen aber bei mir gab es dort immer das Problem dass als Variable 3 Angezeigt wurde...

    Controls in GUIs haben IDs. Wenn du aus einem Input etwas auslesen willst musst du GUICtrlRead verwenden, sonst erhälst du wie schon festgestellt nur die ID.

    PS: Bei Code am besten immer den Quellcode-Tab des Editors und AutoIt-Tags benutzen, bei längeren Skripten auch Spoiler.

    Code
    [spoiler][autoit]dein Skript hier[/autoit][/spoiler]
  • Verwende für das Darstellen von Quellcode in Beiträgen bitte die AutoIt-Quellcode-Tags.

    Außerdem ist es insbesondere als Anfänger sehr hilfreich, Tutorials zu lesen (d. h. nachzuvollziehen usw.) und die Hilfe(-dateien) zu den AutoIt-Funktionen zu benutzen.
    Programmieren erfordert eigenständiges Lernen und Arbeiten.

    Hilfe


    Hier ein Ansatz:

    [autoit]

    $iAnzahl = InputBox("Beispiel", "Anzahl der Schleifendurchläufe")
    If IsInt($iAnzahl) And $iAnzahl > 1 Then
    For $i = 1 To $iAnzahl
    ;hier steht, der $iAnzahl-mal auszuführende Code
    Next
    EndIf
    Exit

    [/autoit]


    Hier die Alternative mit Eingabebeschränkung:

    [autoit]

    #include-once
    #include <EditConstants.au3>
    #include <GUIConstants.au3>

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

    Global $aGUI[3]
    $aGUI[0] = GUICreate("Test", 500, 500)
    $aGUI[1] = GUICtrlCreateInput("", 5, 5, 75, 25, $ES_NUMBER)
    $aGUI[2] = GUICtrlCreateButton("Absenden", 85, 35, 75, 25)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()

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

    Switch $msg
    Case $GUI_ON_EVENT_CLOSE
    Exit
    Case $aGUI[2]
    If GUICtrlRead($aGUI[2]) > 1 Then
    For $i = 1 To GUICtrlRead($aGUI[2])
    ;hier steht der auszuführende Code
    Next
    EndIf
    EndSwitch
    WEnd

    [/autoit]


    PS: Vermutlich hast Du das Handle bzw. die ID des Input-Controls abgefragt und nicht

    [autoit]

    GUICtrlRead()

    [/autoit]

    verwendet.
    PPS: Man könnte das Input-Control auch mithilfe regulärer Ausdrücke (und einer UDF von peethebee) beschränken.