AutoIT vergisst Variable !!

  • Hallo!

    Seit langen lese ich hier mit und bin immer mehr von AutoIT begeistert. Nicht zuletzt da der Funktionsumfang sehr sehr groß ist.
    Ich komme selbst von Rapidbatch das schon etwas in die Jahre gekommen ist und versuche jetzt alte Scipts auf Autoit zu bringen bzw. mit den vielen neuen Funktionen zu spielen.

    Zur Zeit habt ich die TCP-Verbindungen entdeckt und dabei auf etwas sehr seltsames gestossen: In einer GUI habe ich ein Eingabefeld (in dem Fall wird eine Portnummer eingelesen) mit einer Zahl wie folgt definiert (oder besser der Koda):

    [autoit]

    $Port = GUICtrlCreateInput("Port", 168, 16, 49, 21)

    [/autoit]

    weiter unten in meinen Script (genau gesagt in einer function) lese ich den Inhalt wieder aus:

    [autoit]

    $port = GUICtrlRead ($Port)

    [/autoit]

    Und jetzt kommts: Das funktioniert nur einmal !!!

    Wird da Eingabefeld dessen Inhalt sich nicht verändert hat nochmal ausgelesen, so bekomme ich nur 0 (Null) zurück!


    Um das Problem zu umgehen habe ich den Namen der Variable verändert: start $port jetzt $kanal - siehe da: jetzt gehts!

    Hat AutoIT (Version 3.3.10.2) vielleicht da ein kleines Problem mit der groß/klein Schreibung bei selben Variablennamen??


    mein kleines Testscript:

    [autoit]

    ; TCP-Sender test

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

    #include <advfha_proc.au3>

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

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiIPAddress.au3>
    #include <WindowsConstants.au3>
    #include <GuiIPAddress.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("TCP-Client", 602, 347, 216, 659)

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

    $Edit1 = GUICtrlCreateEdit("", 32, 56, 545, 217,$ES_READONLY)
    ;GUICtrlSetState(-1, $GUI_DISABLE)

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

    global $Eingabe = GUICtrlCreateInput("Eingabe", 32, 296, 441, 21)
    $Senden = GUICtrlCreateButton("Senden", 496, 296, 75, 25)
    GUICtrlSetOnEvent(-1, "senden")

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

    $IPAddress1 = _GUICtrlIpAddress_Create($Form1, 32, 16, 130, 21)
    _GUICtrlIpAddress_Set($IPAddress1, "127.0.0.1")

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

    $Port = GUICtrlCreateInput("Port", 168, 16, 49, 21)
    ;GUICtrlSetData($Port, "2000")

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

    GUISetState(@SW_SHOW)

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

    #EndRegion ### END Koda GUI section ###
    Opt("GUIOnEventMode", 1)

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

    ;TCP-Service starten
    TCPStartup ()

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

    While 1
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")
    WEnd

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

    func Ende ()
    exit
    endfunc

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

    func senden ()

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

    $kanal = GUICtrlRead ($Port)
    $ip = _GUICtrlIpAddress_Get ($IPAddress1)

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

    local $text = GUICtrlRead ($Eingabe)
    local $alttext = GUICtrlRead ($Edit1)

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

    local $socketid = TCPConnect ($ip, $kanal)
    local $ret = TCPSend ($socketid, $text)

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

    $text = $alttext & @crlf & ">" & @HOUR & ":" & @MIN & ":" & @SEC & " on " & $ip & ":" & $kanal & " " & $text

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

    GUICtrlSetData($Edit1, $text)
    GUICtrlSetData($Eingabe, "")

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

    endfunc

    [/autoit]


    lg
    Racer

    Einmal editiert, zuletzt von Racer (10. April 2014 um 08:04)

  • Daran lag es aber auch nicht!
    In Zeile 26 weist du der Variable $Port die Control-ID des per GUICtrlCreateInput erstellten Input-Controls zu.

    [autoit]


    $Port = GUICtrlCreateInput("Port", 168, 16, 49, 21)

    [/autoit]

    In Zeile 53 benutzt du dann GUICtrlRead, um den Text des Controls mit der Control-ID aus $Port auszulesen, und in der Variable $Port zu speichern!

    [autoit]


    $port = GUICtrlRead ($Port)

    [/autoit]

    Damit überschreibst du dann die Control-ID, und probierst im nächsten Zugriffsversuch, den ausgelesenen Port als Control-ID zu "missbrauchen". Dieser Wert ist dann natürlich keine gültige ID, und somit gibt GUICtrlRead 0 zurück (Fehler).

    Gruß

  • Liebe AutoIT'ler!

    Ja, ich habe es verstanden: Wenn es keine case sensitive Variable gibt, dann überschreibe ich mir das! Alles klar!

    Leider habe ich das nicht in der Doku gefunden :( Kann auch sein das ich es übersehen habe!

    Nochmal: Vielen Danke für die schnellen und klaren Antworten!

    lg
    Racer

  • Es heißt AutoIt ;)

    Und da du ja das Problem gelöst hast, setz bitte noch den Thread-Präfix auf "gelöst".

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski