schleife bis Buttonklicka usführen

  • Hallo Leute :)
    ich bin recht neu im Autoit-scripting, habe allerdings einigermaßen viel erfahrung in delphi, weshalb ich so ziehmlich weiß, was genau ich will :)
    Ich erklär mal wie das Programm ablaufen soll:
    Auf einer Form ist ein Button.
    Wenn mana uf den klickt, soll er von "Starten" in "Beenden" umbenannt werden (Caption) und eine Schleife starten, die folgendes macht:
    > Immer 5 mal hintereinander " " (Leertaste) senden im abstand von 0,4 sec.
    (Das sieht momentan so aus:

    [autoit]

    ;[...]
    For $i = 1 to 5

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

    send(" ")
    sleep(400)
    Next
    ;[...]

    [/autoit]

    >Sleep(400) und dann das selbe nochmal
    >Nach 15 (weiß ncih genau wieviele sec ich dafür brauch) sec soll die Schleife an das selbe Fenster z.B. F3 (taste) senden.
    >und wieder alles Komplett von vorne
    Beim erneuten Klick auf den Button sollte diese Schleife deaktiviert werden.
    Leider habe ich, wie ich oben schon erwähnt habe, wenig bis keine Ahnung von Autoit.
    Könnt ihr mir bitte helfen?

    Nochmal der gesamte Script..
    Form muss noch angepasst werden.

    [autoit]

    #include
    #Include
    #include
    Opt("GUIOnEventMode", 1)
    $mainwindow = GUICreate("lala",700,500)
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    GUISetState(@SW_SHOW)
    GUICtrlCreateLabel("lala^^",0,0)
    $but_start = GUICtrlCreateButton("Starten", 0, 15,150)
    GUICtrlSetOnEvent($but_start, "start")
    While 1
    sleep(10)
    WEnd

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

    Func start()
    WinWaitActive("MyProg");
    For $i = 1 to 5
    send(" ")
    sleep(400)
    Next
    exit
    EndFunc

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

    Func CLOSE()
    Exit
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]
  • soo, dann fange ich mal an ^^
    den Button kannste mit

    [autoit]

    Guictrlsetdata($but_start,"Beenden")

    [/autoit]


    umbenennen,
    mit der Funktion

    [autoit]

    $Zeit=TimerInit() ; Startet einen Timer
    $AktuelleZeit=Round(TimerDiff($Zeit),0)/1000; Gibt den gerundeten Zeitwert des Timers in Sekunden an

    [/autoit]


    kannst du die 15 sekunden bestimmen (am besten in einer While Schleife)
    bei dem abbrechen (alias "Beenden") des scripts fällt mir grad nix ein, da er in der schleife nicht auf den Buttonklick
    reagieren wird...
    ich hoffe ich konnte wenigstens ein bisschen helfen :rolleyes:

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Wils du das mir einer While schleifemachen dan gibt es diese möglichkeit : Beispiel :thumbup:

    Spoiler anzeigen


    [autoit]



    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 116, 95, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 16, 16, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Button2", 16, 48, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    Global $set = 1
    AdlibEnable ( "_check", 120 )
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    start()
    Case $Button2
    stop ()
    EndSwitch
    WEnd

    Func start()
    $set = 1
    Run("notepad.exe")
    WinWaitActive ( "Unbenannt - Editor" )
    WinActivate ( "Unbenannt - Editor" )
    While $set=1
    Send("hello")
    Sleep ( 300 )
    WEnd
    EndFunc
    Func stop()
    $set=0
    EndFunc
    Func _check()
    $nMsg=GUIGetMsg()
    If $nMsg=$Button2 Then $set=0
    EndFunc

    [/autoit]


    wobei diese metohde nicht ganz geht also man muss manch ma öffters drauf klicken um es zu stoppen ^^

  • Hallo oldy,

    Hallo Leute :)
    ich bin recht neu im Autoit-scripting, habe allerdings einigermaßen viel erfahrung in delphi, weshalb ich so ziehmlich weiß, was genau ich will :)
    Ich erklär mal wie das Programm ablaufen soll:
    Auf einer Form ist ein Button.
    Wenn mana uf den klickt, soll er von "Starten" in "Beenden" umbenannt werden (Caption) und eine Schleife starten, die folgendes macht:
    > Immer 5 mal hintereinander " " (Leertaste) senden im abstand von 0,4 sec.

    obwohl du genau weist was du willst, schilder doch bitte genauer welches Programm du damit automatisieren möchtest, da es elegantere Möglichkeiten gibt ein Fremprogramm zu automatisieren als über "Send". Vor allem welches Programm benötigt schon alle 0,4 sec eine Leertaste. Mir fällt in diesem Zusammenhang nur das Wort BOT ein, von daher lies die Forenregeln und erkläre dich genauer,

    mfg (Auto)bert

  • Hallo Pinguin94,

    Delphi kostet Geld => AutoIT nicht. Und da ich selbst in Delphi programmiert habe weiss ich das es zumindest bis 6.0 (danach?) keine fertigen Funktionen beigelegt waren, die diese Art der Automation (Tastendrücke senden) unterstützt hätten,

    mfg (Auto)Bert

  • In AutoIt ist es viel einfacher einen Bot zu erstellen.

    *Lazarus .. :D kostenlos*

    Mfg. Tince