ControlGetText in Schleife: Variable wird beim verlassen geleert

  • Hallo

    Ich habe wieder ein Problem dass ich offensichtlich nicht gelöst bekomme. Und zwar folgendes: Solange ein Fenster existiert, möchte ich aus einem Editfeld davon den Text auslesen. Wird das Fenster geschlossen, sollte ich so den aktuellsten Stand des Textfeldes "gespeichert" haben. Das Problem: Sobald die Schleife verlassen wird, wird die Variable geleert, und ich weiß nicht weshalb.

    Beispiel:

    [autoit]

    While WinExists("[CLASS:Notepad]")
    Sleep(250)
    $edit = ControlGetText("[CLASS:Notepad]","","Edit1")
    ConsoleWrite("Editfeld: " & $edit & @CRLF)
    WEnd

    [/autoit]

    Startet Notepad, dann dass Script. Tippt was in Notpad ein (zb "Hallo"), und dann schließt Notepad. Wie ihr in der Konsole sehen könnt, wird der Text korrekt geholt und gespeichert, aber sobald Notepad geschlossen wird und die Schleife somit verlassen, wird er gelöscht.

    Warum nur ?(

    Einmal editiert, zuletzt von klischee (5. Juli 2011 um 11:40)

  • [autoit]

    Dim $edit
    While WinExists("[CLASS:Notepad]")
    Sleep(250)
    $edit = ControlGetText("[CLASS:Notepad]","","Edit1")
    ConsoleWrite("Editfeld: " & $edit & @CRLF)
    WEnd

    [/autoit]

    Edit: Erklärung: Die Variable wird im jeweiligen Block deklariert, wenn du sie nicht explizit als global deklarierst.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    Einmal editiert, zuletzt von L3viathan (5. Juli 2011 um 11:24)

  • Danke, aber ändert nichts..
    Variable wird beim Schleife-verlassen nachwievor geleert.

    Beispiel:

    Spoiler anzeigen


    Wie man sieht, die letzte Zeile mit Editfeld ist leer (also sobald ich Notepad schließe).

  • Wie, mehr Code?
    Es passiert doch, wenn ich den im Topic geposteten Beispiel-Code ausführe.

  • Okay, sorry, dann habe ich dich missverstanden.
    Anscheinend ist das intern so, dass das Feld erst geleert wird. Eine Lösung für dich wäre:

    [autoit]

    Dim $edit
    While WinExists("[CLASS:Notepad]")
    Sleep(250)
    If ControlGetText("[CLASS:Notepad]","","Edit1") <> "" Then $edit = ControlGetText("[CLASS:Notepad]","","Edit1")
    ConsoleWrite("Editfeld: " & $edit & @CRLF)
    WEnd

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Danke, das funktioniert!
    Im nachhinein frag ich mich immer, wieso ich nicht selbst auf sowas komme ^^ :huh: