Fragen bzgl. GUICtrlCreateInput, IniRead, Do - Until und Pause

  • Hallo erstmal an alle :)

    Also, ich habe derzeit einige Probleme, und ich peil im Moment einfach nicht warum das nicht klappt. :/

    Ich fange mal mit dem ersten an:

    Ich muss/kann/will in der Schule ein Referat über AutoIt halten. Meine Lehrerin hat noch nie davon gehört und wollte deswegen gerne etwas sehen. Tja, und ich soll ein einfaches Beispielskript schreiben. Ich dachte mir halt, dass ich eine sich immer wieder wiederholende Textausgabe schreiben könnte. Das ganze Skript habe ich mal hier, ich weis, die Namen der Variablen sind etwas ungünstig gewählt, aber sie tun ihren Zweck.^^:

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=C:\Users\sie\Desktop\Programmierzeug\Skripte\Referat - Textausgabe.kxf
    $Form1_1 = GUICreate("Textausgabe by Kevin Soldner", 420, 235, 218, 152)
    $Group1 = GUICtrlCreateGroup("Texteinstellungen", 8, 16, 401, 185)
    $Text1 = GUICtrlCreateLabel("1. Text", 24, 40, 60, 17)
    $Text2 = GUICtrlCreateLabel("2. Text", 24, 72, 60, 17)
    $Text3 = GUICtrlCreateLabel("3. Text", 24, 104, 60, 17)
    $Text4 = GUICtrlCreateLabel("4. Text", 24, 136, 60, 17)
    $Text5 = GUICtrlCreateLabel("5. Text", 24, 168, 60, 17)
    $Ltext1 = GUICtrlCreateInput("", 96, 40, 97, 21)
    $Ltext2 = GUICtrlCreateInput("", 96, 72, 97, 21)
    $Ltext3 = GUICtrlCreateInput("", 96, 104, 97, 21)
    $Ltext4 = GUICtrlCreateInput("", 96, 136, 97, 21)
    $Ltext5 = GUICtrlCreateInput("", 96, 168, 97, 21)
    $Zeitlabel1 = GUICtrlCreateLabel("1. Zeit", 200, 40, 59, 17)
    $Zeitlabel2 = GUICtrlCreateLabel("2. Zeit", 200, 72, 59, 17)
    $Zeitlabel3 = GUICtrlCreateLabel("3. Zeit", 200, 104, 59, 17)
    $Zeitlabel4 = GUICtrlCreateLabel("5. Zeit", 200, 136, 59, 17)
    $Zeitlabel5 = GUICtrlCreateLabel("5. Zeit", 200, 168, 59, 17)
    $Zeit1 = GUICtrlCreateInput("", 272, 40, 113, 21)
    $Zeit2 = GUICtrlCreateInput("", 272, 72, 113, 21)
    $Zeit3 = GUICtrlCreateInput("", 272, 104, 113, 21)
    $Zeit4 = GUICtrlCreateInput("", 272, 136, 113, 21)
    $Zeit5 = GUICtrlCreateInput("", 272, 168, 113, 21)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Datei = GUICtrlCreateMenu("Datei")
    $Config = GUICtrlCreateMenu("Speichern/Laden", $Datei)
    $save = GUICtrlCreateMenuItem("Speichern", $Config)
    $load = GUICtrlCreateMenuItem("Laden", $Config)
    $End = GUICtrlCreateMenuItem("Beenden", $Datei)
    $Extras = GUICtrlCreateMenu("Extras")
    $Ueber = GUICtrlCreateMenuItem("Über", $Extras)
    Dim $Form1_1_AccelTable[1][2] = [["!+{HOME}", $save]]
    GUISetAccelerators($Form1_1_AccelTable)
    #EndRegion ### END Koda GUI section ###

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

    HotKeySet ( "{F3}", "Start")
    HotKeySet ( "{ESC}", "Stopp")

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

    ;Variablen global setzen
    Global $Ltext1
    Global $Ltext2
    Global $Ltext3
    Global $Ltext4
    Global $Ltext5
    Global $Zeit1
    Global $Zeit2
    Global $Zeit3
    Global $Zeit4
    Global $Zeit5

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE ;GUI schließen
    Exit

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

    Case $Save ;Texteinstellungen speichern
    IniWrite ( "Settings.ini", "Texteinstellungen", "Ltext1", $Ltext1)
    IniWrite ( "Settings.ini", "Texteinstellungen", "Ltext2", $Ltext2)
    IniWrite ( "Settings.ini", "Texteinstellungen", "Ltext3", $Ltext3)
    IniWrite ( "Settings.ini", "Texteinstellungen", "Ltext4", $Ltext4)
    IniWrite ( "Settings.ini", "Texteinstellungen", "Ltext5", $Ltext5)
    IniWrite ( "Settings.ini", "Texteinstellungen", "Zeit1", $Zeit1)
    IniWrite ( "Settings.ini", "Texteinstellungen", "Zeit2", $Zeit2)
    IniWrite ( "Settings.ini", "Texteinstellungen", "Zeit3", $Zeit3)
    IniWrite ( "Settings.ini", "Texteinstellungen", "Zeit4", $Zeit4)
    IniWrite ( "Settings.ini", "Texteinstellungen", "Zeit5", $Zeit5)

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

    Case $Load ;Texteinstellungen laden
    $Ltext1 = IniRead ( "Settings.ini", "Texteinstellungen", "Ltext1", "")
    $Ltext2 = IniRead ( "Settings.ini", "Texteinstellungen", "Ltext2", "")
    $Ltext3 = IniRead ( "Settings.ini", "Texteinstellungen", "Ltext3", "")
    $Ltext4 = IniRead ( "Settings.ini", "Texteinstellungen", "Ltext4", "")
    $Ltext5 = IniRead ( "Settings.ini", "Texteinstellungen", "Ltext5", "")
    $Zeit1 = IniRead ( "Settings.ini", "Texteinstellungen", "Zeit1", "")
    $Zeit2 = IniRead ( "Settings.ini", "Texteinstellungen", "Zeit2", "")
    $Zeit3 = IniRead ( "Settings.ini", "Texteinstellungen", "Zeit3", "")
    $Zeit4 = IniRead ( "Settings.ini", "Texteinstellungen", "Zeit4", "")
    $Zeit5 = IniRead ( "Settings.ini", "Texteinstellungen", "Zeit5", "")

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

    Case $End ;Programm beenden
    Exit

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

    Case $Ueber ;Aboutfenster öffnen
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $About = GUICreate("About", 380, 206, 302, 218)
    GUISetIcon("D:\006.ico")
    $GroupBox1 = GUICtrlCreateGroup("", 8, 8, 369, 153)
    $Image1 = GUICtrlCreatePic("About.jpg", 16, 24, 201, 73, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $ALabel1 = GUICtrlCreateLabel("KevKevs Beispielskript", 224, 24, 148, 17, $WS_GROUP)
    $ALabel2 = GUICtrlCreateLabel("Alle Änderungen vorbehalten", 224, 48, 141, 17, $WS_GROUP)
    $ALabel4 = GUICtrlCreateLabel("Dieses Produkt ist weltweit urheberrechtlich geschützt ... nicht. :D", 16, 136, 313, 17, $WS_GROUP)
    $ALabel3 = GUICtrlCreateLabel("Copyright Kevin Soldner", 16, 112, 216, 17, $WS_GROUP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUIDelete ()

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

    EndSwitch
    WEnd

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

    EndSwitch
    WEnd

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

    Func Stopp ()
    Exit
    EndFunc

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

    Func Start ()
    While True
    Send ($Ltext1)
    Send ("{Enter}")
    Sleep ($Zeit1)
    Send ($Ltext2)
    Send ("{Enter}")
    Sleep ($Zeit2)
    Send ($Ltext3)
    Send ("{Enter}")
    Sleep ($Zeit3)
    Send ($Ltext4)
    Send ("{Enter}")
    Sleep ($Zeit4)
    Send ($Ltext5)
    Send ("{Enter}")
    Sleep ($Zeit5)
    WEnd
    EndFunc

    [/autoit]

    Ich will also einfach eine Funktion, in der ich in einem Textprogramm (z.B. Word) eine sich immer wieder wiederholende Folge von Zeichen einträgt. Das klappt auch alles wunderbar, bis auf die Ausgabe und das Ini.Read. Bei der Ausgabe kann ich eingeben was ich will, er ignoriert es einfach und trägt mir stur die Zahlen 3, 5, 7, 9, 11 ein, und die Zeitausgabe beachtet er auch nicht. Wenn ich dann die Einstellungen speichere (auch wenn nichts drinsteht), steht in der .ini 3, 5, 7, 9, 11 drin, das was ich reinschreibe wird beflissen ignoriert. Seltsam ist nur, dass wenn ich das ganze ohne Koda, sondern mit InputBox und so mache, das er dann alles so macht wie ich es sage, aber ich will eben eine GUI haben ... das Skript muss meine Lehrerin schon bisschen beeindrucken, da kann ich nich mit ein paar MsgBoxen und InputBoxen kommen. :D

    Das IniRead macht er einfach nicht, da hat er offenbar keine Lust dazu.

    Das dritte Problem wäre beim Do - Until befehl. Das Skript habe ich ohne Koda gemacht, dehalbt etwas andere Namen:

    [autoit]

    HotKeySet ( "{F3}", "Start")
    HotKeySet ( "{ESC}", "Stopp")

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

    Global $Zext = InputBox ( "KevKevs Textausgabe", "Hier Text eingeben")
    Global $Zeit = InputBox ( "KevKevs Textausgabe", "Hier den Abstand zwischen den Texten Millisekunden!)")

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

    Do
    If NOT ($Zeit >1 OR < 1) Then
    MSgBox (64, "Error", "Nur Zahlen im Abstandsfeld eingeben!")
    $Zeit = InputBox ( "KevKevs Textausgabe", "Hier den Abstand zwischen den Texten. (In Millisekunden!)")
    Else
    Sleep (1)
    EndIf
    Until $Zeit >1 OR < 1

    [/autoit]

    Das soll ne Errormeldung darstellen. Er soll überprüfen, ob in der Variable $Zeit nur Zahlen enthalten sind. Wenn nicht, soll der Benutzer es noch einmal eingeben, wenn schon soll er nix machen. Ich wusste aber nich wie man überprüft, ob nur Zahlen enthalten sind, deswegen auf diese eher unschickliche Methode die nicht funktioniert. Außerdem bringt er mir die Message Box nur einmal, danach nicht mehr, heist beim zweiten mal kann man auch buchstaben eingeben, die werden dann eben als 0 gewertet.

    Hoffe ihr könnt mir helfen, der 1er würde meinem Notenspiegel nicht schaden. :thumbup:

    Und eine Frage habe ich noch bezüglich einer Pause - wie macht man das? :D

    [autoit]

    Func Stopp ()
    Exit
    EndFunc

    [/autoit]

    Bis jetzt kann ich es nur so machen, aber dann beendet er das Programm ja komplett und ich muss es neustarten. Kann man auch einfach das Skript unterbrechen und später weiter ausführen?

    Ich weis, viele viele Fragen, aber es eilt nicht, ich muss es erst am Mittwoch halten. 8)

    Gruß Kevin alias DoF (nicht Doof :D)

  • Ich sehe beim Iniread keinen Fehler, wenn er beim speichern eine Ini erstellt, dan sollte er die auch wieder genauso einlesen.

    Zitat

    $Zeit >1 OR < 1


    Das alleine sollte schon ausreichen um eine Errormeldung zu erzeugen... Wenn dann IsNumber($Zeit).
    Und das Script unterbrechen kannst du z.B. mit einer Endlosschleife (mit Sleep(10)) die ggf. per ExitLoop beendet wird.

  • Hallo Destiny of Faith,

    ein freiwilliges Refreart sollte man nur zu einem Thema halten, dass man begerscht. Wir sollen jetzt also hier deine Problem lösen und du steckst die gute Note ein du Schlingel. Wenn du Daten aus einem Control weiterverwenden willst musst du sie mit GuiCtrlRead auslesen, die von dir verwendeten Variablen enthalten ja nur die ID des Controls deshalb die Zahlen. Mach es also so:

    [autoit]

    IniWrite ( "Settings.ini", "Texteinstellungen", "Ltext1", GuiCtrlRead($Ltext1))

    [/autoit]

    .
    Word kannst du mit den Funktionen der Word.au3 (ist satndardmässig bei AutoIt dabei und auch in der Hilfe unter nbenutzerdefineierte Funktionen beschrieben) viel besser fernsteuern als mit dem Send-Befehl, die Nutzung dieses Befehls drängt mir den Verdacht auf das du eigentlich einen Spiele-Bot schreiben willst, deshalb war dies meine einzige Antwort in diesem Thema. Naja wenigstens hättest du dir dann eine gute Ausrede einfallen lassen und hast dir zudem die Arbeit gemacht ein Beispielskript hierzu zu schreiben,

    mfg autoBert

  • Naja, freiwillig wäre hier wieder übertrieben, aber ich kann meiner Lehrerin ja schlecht sagen das ich da keine Lust dazu habe.^^ Sie hat mich halt gefragt ob ich ein Referat drüber halten könne, und nein sagen is da halt nich drin. Außerdem gibts keine Note, trotzdem möchte ich schon was gutes abliefern.

    Hmm, ich spiele grundsätzlich keine MMOs mehr weil mir das auf Dauer zu teuer wird ... finde das schon recht unfair mir sowas ohne triftige Gründe zu unterstellen, zudem ich das mit Word schlicht und einfach nicht wusste. Ich könnte jetz weiter diskutieren, aber naja, lassen wirs so im Raum stehen. Danke für die Antwort, hat schonmal das eine Problem gelöst.

    @Name

    Danke auch dir, das klappt jetzt alles. :)