GUI Hilfe

  • Hallo,

    Ich habe eine GUI mit 3 Inputboxen, wo ich 3 Werte(Sleepwerte) mit Hand reinschreiben will.
    Habe ich die 3 Boxen ausgefüllt, dann möchste ich per Button(OK) das Script starten,
    welches wiederrum erst nach 2 mal linke maustaste beginnt.

    Wie und Wo muss ich jetzt den OK Button einpflegen?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode",0) ;1 = an, 0 = aus

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

    GUICreate ( "Test",200,200,50,100)

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

    $label1 = GUICtrlCreateLabel("A",80,10,150,50)
    $Input1 = GUICtrlCreateInput("", 10, 10, 60, 20)
    $label2 = GUICtrlCreateLabel("B",80,50,150,100)
    $Input2 = GUICtrlCreateInput("", 10, 50, 60, 20)
    $label3 = GUICtrlCreateLabel("C",80,90,150,150)
    $Input3 = GUICtrlCreateInput("", 10, 90, 60, 20)

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

    $button1 = GUICtrlCreatebutton("OK", 10, 150, 60, 20)

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

    GUISetState(@SW_SHOW)

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

    HotKeySet("{ESC}", "PAUSE")

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

    Global $pause = False

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

    #include <misc.au3>

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

    Global $iCount = 0

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

    While 1
    If _IsPressed("01") Then
    $iCount += 1
    Do
    Sleep(100)
    Until Not _IsPressed("01")
    EndIf

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

    If $iCount = 2 Then
    $iCount = 0
    sleep($Input1)
    mouseclick( "left")
    sleep($Input2)
    mouseclick( "left")
    sleep($Input3)
    mouseclick( "left")
    EndIf
    WEnd

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

    Func PAUSE()

    $pause = Not $pause
    While $pause
    Sleep(50)
    WEnd

    EndFunc

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

    While 1
    Sleep(100)
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Der Rest stimmt so, oder?

    Danke schonmal im Vorraus

    2 Mal editiert, zuletzt von GSX750F-Special (29. August 2012 um 11:35)

  • Ich würde das ganze Script erstmal überarbeiten.
    Du hast insgesamt drei schleifen. Eine in einer Funktion, die anderen beiden nicht. Die letzte schleife ( ganz unten ) kannste wegmachen und den inhalt in die erste tun ( die ab zeile 27 ). Da kannst du auch gleich mit GUIGetMsg() ( sprich der Variable $Msg ) den Button prüfen. Am besten auch im Select teil. Die Funktion PAUSE() ist sinnlos, da sie eine endlosschleife enthält, sprich, wenn du ESC drückst, kannst du nichts mehr machen, noch nichtmal per "Kreuz" beenden.

    Wenn du das alles gemacht hast, dann dürfte es gehen. Ansonsten ist der Rest richtig.

    mfg
    Hauke

    ps.: Wenn du weiterhin mit GUIs arbeiten möchtest, dann guck dir mal meine GUI-Tutorial reihe an: Zur Tutorial Reihe ( Youtube )

  • Spoiler anzeigen
    [autoit]

    ;########INCLUDES GEHÖREN NACH OBEN##########
    #include <GUIConstants.au3>
    #include <misc.au3>

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

    Global $pause = False
    HotKeySet("{ESC}", "PAUSE")
    Global $iCount = 0

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

    GUICreate("Test", 200, 200, 50, 100)
    $label1 = GUICtrlCreateLabel("A", 80, 10, 150, 50)
    $Input1 = GUICtrlCreateInput("", 10, 10, 60, 20)
    $label2 = GUICtrlCreateLabel("B", 80, 50, 150, 100)
    $Input2 = GUICtrlCreateInput("", 10, 50, 60, 20)
    $label3 = GUICtrlCreateLabel("C", 80, 90, 150, 150)
    $Input3 = GUICtrlCreateInput("", 10, 90, 60, 20)
    $button1 = GUICtrlCreateButton("OK", 10, 150, 60, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button1
    $iCount += 1
    If $iCount = 2 Then
    $iCount = 0
    Sleep(Guictrlread($Input1))
    MouseClick("left")
    Sleep(Guictrlread($Input2))
    MouseClick("left")
    Sleep(Guictrlread($Input3))
    MouseClick("left")
    $iCount = 0
    EndIf
    EndSwitch
    WEnd

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

    Func PAUSE()
    $pause = Not $pause
    While $pause
    Sleep(50)
    WEnd
    EndFunc ;==>PAUSE

    [/autoit]

    Hier mal aufgeräumt

    Und an Hauke96,
    Die Pause Funktion ist nicht sinnlos ;)
    Schau dir mal das Beispiel zu HotkeySet an. Zweimal ESC drücken bewirkt, das das Script dann weiter läuft :)

    Um die Sleep Werte zu erhalten, musst du die Inputboxen auslesen. Mit Guictrlread kriegst du den Inhalt, so wie du es hattest kriegst du nur die Control ID der Inputboxen raus

  • Hey, danke erstmal.

    Jetzt funktioniert wenigstens die eingabe der sleepzeit.

    was ich jetzt noch nicht ganz hinbekomme:

    momentan nach deinem script beginnt er mit dem script erst wenn ich 2x auf OK geklickt habe,
    ich wollte mit dem OK nur bestätigen das die 3 sleepzeiten eingegeben sind.
    danach soll der rest des scriptes erst beginnen, nachdem ich 2mal die linke maustaste drücke.

    ich hab mal dein script bearbeitet, aber ohne erfolg.

    was grün auskommentiert ist, war von deinem, was ich raus habe.
    ich bis /ich ist mein hinzugefügtes.

    Spoiler anzeigen
    [autoit]

    ;########INCLUDES GEHÖREN NACH OBEN##########
    #include <GUIConstants.au3>
    #include <misc.au3>

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

    Global $pause = False
    HotKeySet("{ESC}", "PAUSE")
    Global $iCount = 0

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

    GUICreate("Test", 200, 200, 50, 100)
    $label1 = GUICtrlCreateLabel("A", 80, 10, 150, 50)
    $Input1 = GUICtrlCreateInput("1000", 10, 10, 60, 20)
    $label2 = GUICtrlCreateLabel("B", 80, 50, 150, 100)
    $Input2 = GUICtrlCreateInput("1500", 10, 50, 60, 20)
    $label3 = GUICtrlCreateLabel("C", 80, 90, 150, 150)
    $Input3 = GUICtrlCreateInput("2000", 10, 90, 60, 20)
    $button1 = GUICtrlCreateButton("OK", 10, 150, 60, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button1
    ;$iCount += 1

    If _IsPressed("01") Then ;ich
    $iCount += 1
    Do
    Sleep(100)
    Until Not _IsPressed("01")
    EndIf ;/ich

    If $iCount = 2 Then
    ;$iCount = 0
    Sleep(Guictrlread($Input1))
    MouseClick("left")
    Sleep(Guictrlread($Input2))
    MouseClick("left")
    Sleep(Guictrlread($Input3))
    MouseClick("left")
    $iCount = 0
    EndIf
    EndSwitch
    WEnd

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

    Func PAUSE()
    $pause = Not $pause
    While $pause
    Sleep(50)
    WEnd
    EndFunc ;==>PAUSE

    [/autoit]
  • Also so wie ich das jetzt verstanden habe soll das so:
    1.) Eintippen der drei wartezeiten
    2.) Klicken auf den "OK" Button um Zeiten zu bestätigen
    3.) 2x klicken mit der linken Maustaste um die mouseklick-Befehle aufzurufen.

    Spoiler anzeigen
    [autoit]

    ;########INCLUDES GEHÖREN NACH OBEN##########
    #include <GUIConstants.au3>
    #include <misc.au3>

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

    Global $pause = False
    HotKeySet("{ESC}", "PAUSE")
    Global $iCount = 0

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

    GUICreate("Test", 200, 200, 50, 100)
    $label1 = GUICtrlCreateLabel("A", 80, 10, 150, 50)
    $Input1 = GUICtrlCreateInput("1000", 10, 10, 60, 20)
    $label2 = GUICtrlCreateLabel("B", 80, 50, 150, 100)
    $Input2 = GUICtrlCreateInput("1500", 10, 50, 60, 20)
    $label3 = GUICtrlCreateLabel("C", 80, 90, 150, 150)
    $Input3 = GUICtrlCreateInput("2000", 10, 90, 60, 20)
    $button1 = GUICtrlCreateButton("OK", 10, 150, 60, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    ;~ Sleep(100) ; Kann auch wieder aktiviert werden
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button1
    if $iCount = 0 Then $iCount = 1 ; Wenn $iCount noch 0 ist, dann soll er $iCount = 1 setzen
    while _IsPressed(01) ; Solange die LINKE Maustaste gedrückt ist ...
    sleep(250) ; ... soll er warten
    WEnd ; END
    EndSwitch
    if _IsPressed(01) And $iCount >= 1 Then ; Wenn Die Linke Maustaste gedrückt ist UND $iCount größer-gleich 1 , dann ...
    $iCount += 1 ; $iCount + 1 rechnen
    If $iCount = 3 Then ; UNd wenn $iCount dann 3 ist ( nach 2x klicken ), dann soll er deine Befehle ausfrühren:
    Sleep(Guictrlread($Input1))
    MouseClick("left")
    Sleep(Guictrlread($Input2))
    MouseClick("left")
    Sleep(Guictrlread($Input3))
    MouseClick("left")
    $iCount = 0 ; Wieder auf 0 setzen, damit man das wieder von vorne machen kann
    EndIf
    while _IsPressed(01) ; Solange die LINKE Maustaste gedrückt ist ...
    sleep(250) ; ... soll er warten
    WEnd; END
    EndIf
    WEnd

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

    Func PAUSE()
    $pause = Not $pause
    While $pause
    Sleep(50)
    WEnd
    EndFunc ;==>PAUSE

    [/autoit]


    so macht das script das jetzt.

    mfg
    Hauke

  • Spoiler anzeigen
    [autoit]

    ;########INCLUDES GEHÖREN NACH OBEN##########
    #include <GUIConstants.au3>
    #include <misc.au3>

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

    Global $pause = False
    HotKeySet("{ESC}", "PAUSE")
    Global $iCount = 0
    Global $Buttoncheck = False
    Global $hDLL = DllOpen("user32.dll")
    GUICreate("Test", 200, 200, 50, 100)
    $label1 = GUICtrlCreateLabel("A", 80, 10, 150, 50)
    $Input1 = GUICtrlCreateInput("1000", 10, 10, 60, 20)
    $label2 = GUICtrlCreateLabel("B", 80, 50, 150, 100)
    $Input2 = GUICtrlCreateInput("1500", 10, 50, 60, 20)
    $label3 = GUICtrlCreateLabel("C", 80, 90, 150, 150)
    $Input3 = GUICtrlCreateInput("2000", 10, 90, 60, 20)
    $button1 = GUICtrlCreateButton("OK", 10, 150, 60, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button1
    $Buttoncheck = True
    EndSwitch
    If $Buttoncheck = True Then
    If _IsPressed("01", $hDLL) Then ;ich
    $iCount += 1
    Do
    Sleep(100)
    Until Not _IsPressed("01", $hDLL)
    EndIf ;/ich
    If $iCount = 2 Then
    ;$iCount = 0
    Sleep(GUICtrlRead($Input1))
    MouseClick("left")
    Sleep(GUICtrlRead($Input2))
    MouseClick("left")
    Sleep(GUICtrlRead($Input3))
    MouseClick("left")
    $iCount = 0
    EndIf
    EndIf
    WEnd

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

    Func PAUSE()
    $pause = Not $pause
    While $pause
    Sleep(50)
    WEnd
    EndFunc ;==>PAUSE

    [/autoit]

    Meine Lösung, etwas anders als die von Hauke