Switch + If

  • Hi

    ich hab erst vor kurzem mit autoit angefangen also entschuldigt bitte meine unwissenheit.

    Hier ist ein ausschnitt aus meinem code: (s steht natürlich noch was dazwischen sonst würde es ja keinen sinn ergeben.)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    GUICreate("by camelxDD",450,400)
    $button3 = GUICtrlCreateButton("test an",2,54,100,50)
    $button4 = GUICtrlCreateButton("aus",104,54,50,50)
    guictrlsetstate($button4,$gui_disable)
    GUICtrlCreateLabel("test __sek:",2,160)
    $test = GUICtrlCreateInput("",2,180,60,20)
    GUISetState (@SW_SHOW)
    $test2 = False
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button3
    guictrlsetstate($button4,$gui_enable)
    guictrlsetstate($button3,$gui_disable)
    Run("notepad.exe")
    WinWaitActive("Unbenannt - Editor")
    MsgBox(48,"3sek","start in 3 sekunden",1000)
    sleep(3000)
    $test2 = true
    Case $button4
    guictrlsetstate($button3,$gui_enable)
    guictrlsetstate($button4,$gui_disable)
    $test2 = false
    EndSwitch
    ;;bis hierhin geht alles gut
    if $test2 = true Then
    send("1")
    sleep(120)
    send("1")
    sleep(GUICtrlRead($test)*1000)
    endIf
    Wend

    [/autoit]


    nun meine frage: Wenn ich in dem if bin kann ich den aus schalter nicht mehr betätigen.

    woran liegt das und wie kann ich das umgehen?


    thnx schonmal im vorraus


    ÇamelxDD

    • Offizieller Beitrag

    Servus, daran ist der Code schuld:

    Spoiler anzeigen
    [autoit]

    if $test2 = true Then
    send("1")
    sleep(120)
    send("1")
    sleep(GUICtrlRead($test)*1000)
    endIf

    [/autoit]

    Du führst einen Sleep aus. Bei einem Sleep macht dein Script gar nichts mehr, es pausiert wärend der Ausführung.

  • Danke für die schnelle antwort.


    Aber für meine zwecke muss ich aber ein sleep ausführen da ich ja will das autoit nur alle zb. 2 sek "11"schreibt.

    kann ich das irgentwie anders lösen sodass man den button immernoch betätigen kann?


    thnx ÇamelxDD

    • Offizieller Beitrag

    Auch auf die Gefahr hin das es wieder mal um einen Bot geht, schau dir mal AdlibEnable an.
    Mit AdlibEnable kannst du eine Funktion alle x Sekunden ausführen. Einfach mal die Hilfe lesen.
    Wenn du mehrere solcher Funktionen im Script brauchst würde ich dir _Timer_SetTimer empfehlen.
    Alternativ die Beta verwenden, da gibt es AdlibRegister das mehrere Adlibs ermöglicht.

  • Sorry wenn ich euch nerve aber ich check dieses adlib enable nicht kann mich bitte jemand erleuchten. xD

    Das ist mein code:

    [autoit]


    run("notepad")

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

    AdlibEnable("myadlib",2)

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

    Func myadlib()

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

    send("Hallo")
    EndFunc

    [/autoit]

    kann mir pls jemand sagen was daran schon wieder falsch ist und wie ich das verbessern kann?


    CamelxDD

  • Hi,

    abgesehen davon eine Funktion alle 2 ms ausführen zulassen:
    1) Notepad ist noch nicht da, bezw. das Fenster ist noch nicht aktiv.
    2) Dann beendet sich Dein Script, bevor ein Send bei Notepad ankommt.

    [autoit]

    HotKeySet("+{ESC}", "_exit") ;beende Script mit Shift Escape
    run("notepad")
    AdlibEnable("myadlib", 5000) ; alle 5 sec myadlib

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

    While 1

    WEnd

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

    Func myadlib()
    send("Hallo")
    EndFunc

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

    Func _exit ()
    Exit
    EndFunc

    [/autoit]

    ;-))
    Stefan

  • [autoit]

    run("notepad")

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

    AdlibEnable("myadlib",200) ; 2 ms war dann doch ein bisschen hart an der Grenze oder nicht?
    Func myadlib()
    send("Hallo")
    EndFunc

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

    While 1 * Sleep(100) ; Die schleife hast du vergessen. Sonst wär ja sofort schluss mit dem Script
    WEnd

    [/autoit]

    Edit: Verdammt, zu langsam. Naja dafür frisst das von ojo meine komplette CPU auf :P
    Sleep() in der While schleife ftw :rock: