Benutzereingabe in Textfeld schreiben

  • Hallo,

    häng hier an einer recht einfachen sache. Ich möchte auf eine Benutzereingabe warten diese soll nur die zahlen 1 - 4 erlauben und den eingegebenen Wert dann in ein Textfeld im Installation Wizard übernehmen. Bis jetzt sieht es so aus:

    [autoit]


    guicreate("Size")
    $vsize=GUICtrlCreateInput("1", 90,10,50,20,$ES_NUMBER)
    $OK=GUICtrlCreateButton("&OK", 40,100,80,20)
    $Cancel=GUICtrlCreateButton("&Cancel", 150,100,80,20)
    GUISetState(@SW_SHOW)
    $eingabe=GuiCtrlRead($vsize)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $OK
    ;Wert ins Textfeld übernehmen und mit Installation weiter machen
    Case $Cancel
    Exit
    EndSwitch
    WEnd

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

    ;im Installationwizard soll er dann ins Textfeld springen und den Wert ins Textfeld übernehmen

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

    send("{TAB 4}")
    sleep(300)
    send($eingabe)
    ...

    [/autoit]

    wo muss denn jetzt das GuiCtrlRead() hin und wo das send() und wartet der dann auch auf die Benutzereingabe bevor er mit dem Script weitermacht? der Wert wird nämlich nicht übernommen.
    und wie realisiere ich das nur zahlen von 1-4 eingegeben werden dürfen? ?(

    Einmal editiert, zuletzt von watcha (13. Dezember 2010 um 16:39)

  • Du hast hier eine unendliche While - Schleife und da AutoIt als Skriptsprache sequenziell abgearbeitet wird, wird er nie zu den Send Befehlen kommen.
    Dein Input - Feld musst du dann jedesmal auslesen, wenn OK gedrückt wurde.

    D.h. das ganze müsste in etwa so aussehen wenn ichs richtig verstanden habe:

    Spoiler anzeigen
    [autoit]

    GuiCreate("Size")
    $vsize=GUICtrlCreateInput("", 90,10,50,20,$ES_NUMBER)
    $OK=GUICtrlCreateButton("OK", 40,100,80,20)
    $Cancel=GUICtrlCreateButton("Cancel", 150,100,80,20)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $OK
    Local $eingabe = GUICtrlRead($vsize)
    If $eingabe >= 1 And $eingabe <= 4 Then
    ;~ Wert ist zwischen 1 und 4
    _senden($eingabe)
    Else
    MsgBox(48,"Fehler","Bitte tragen sie einen wert zwischen 1 und 4 ein")
    EndIf
    Case $Cancel
    Exit
    EndSwitch
    Sleep(10)
    WEnd

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

    Func _senden($eingabe)
    Send("{TAB 4}")
    Sleep(300)
    Send($eingabe)
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Milla (13. Dezember 2010 um 15:07)

  • ah stimmt ok aber der Wert wird trotzdem nicht übernommen, das fenster wird nämlich beim Klick auf OK nicht geschlossen. Selbst wenn ich dann noch ein winclose() einfüge, wird der Wert nicht übernommen. Er wartet nämlich nicht bis das Eingabefenster geschlossen wird sondert führt den send() Befehl sofort aus. hm was mach ich falsch?

    Spoiler anzeigen
    [autoit]


    Guicreate("Size")
    $vsize=GUICtrlCreateInput("1", 90,10,50,20,$ES_NUMBER)
    $OK=GUICtrlCreateButton("&OK", 40,100,80,20)
    $Cancel=GUICtrlCreateButton("&Cancel", 150,100,80,20)
    GUISetState(@SW_SHOW)
    ;$eingabe=GuiCtrlRead($vsize)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $OK
    Local $eingabe = GUICtrlRead($vsize)
    If $eingabe >= 1 And $eingabe <= 4 Then
    ;~ Wert ist zwischen 1 und 4
    _senden($eingabe)
    Else
    MsgBox(48,"Fehler","Bitte tragen sie einen wert zwischen 1 und 4 ein")
    EndIf
    Case $Cancel
    Exit
    EndSwitch
    Sleep(10)
    WEnd

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

    Func _senden($eingabe)
    winclose("Size","")
    sleep(500)
    Send("{TAB 4}")
    Sleep(300)
    Send($eingabe)
    EndFunc

    [/autoit]
  • So wies aussieht nehm ich an, dass dein Skript sich nach dem senden auch beenden soll

    Spoiler anzeigen
    [autoit]

    $sizeGui = GUICreate("Size")
    $vsize = GUICtrlCreateInput("1", 90, 10, 50, 20, $ES_NUMBER)
    $OK = GUICtrlCreateButton("&OK", 40, 100, 80, 20)
    $Cancel = GUICtrlCreateButton("&Cancel", 150, 100, 80, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $OK
    Local $eingabe = GUICtrlRead($vsize)
    If $eingabe >= 1 And $eingabe <= 4 Then
    ;~ Wert ist zwischen 1 und 4
    _senden($eingabe)
    Else
    MsgBox(48, "Fehler", "Bitte tragen sie einen wert zwischen 1 und 4 ein")
    EndIf
    Case $Cancel
    Exit
    EndSwitch
    Sleep(10)
    WEnd

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

    Func _senden($eingabe)
    GUIDelete($sizeGui)
    Sleep(500)
    Send("{TAB 4}")
    Sleep(300)
    Send($eingabe)
    Exit
    EndFunc ;==>_senden

    [/autoit]
  • Hallo watcha,

    Wir können dir am besten helfen, wenn du uns sagst, was du am Ende erreichen willst und was bis jetzt funktioniert Also nenne bitte die Anwendung die du automatisieren willst und stelle die dazugehörigen Screenshots vom AutoIt Fenster-Informations-Tool (AU3Info) mit ein.
    Dann können wir uns Gedanken über den besten Weg dorthin machen.

    mfg (Auto)Bert

  • @Milla

    das GUIDelete() wars, damit funktioniert es :) Danke
    Nein, er soll nach der Benutzereingabe mit dem Script weitermachen (TrueCrypt Volume Einrichtung). Hab jetzt also unter den Funktionsaufruf _senden() in der while schleife ein ExitLoop eingefügt, damit er dann im Script weitermacht.

    Hallo auoBert,

    ok, also ich möchte TrueCrypt automatisch mit Standardwerten einrichten lassen. Bis auf die gewünschte Größe des TrueCrypt Volumes, muss der User nichts eingeben. Bis gerade eben hat es an der Benutzereingabe gescheitert, da wie gesagt, nach der Eingabe der volumegröße sich das Fenster nicht geschlossen hat und der Wert auch nicht in das Textfeld des Installation-Wizards übernommen wurde. Mit GUIDelete() hats aber jetzt funktioniert. Außerdem wusste ich nicht wie ich nur Wert zwischen 1-4 erlaube...

    Wollte den Beitrag übersichtlich halten deshalb hab ich nur den code schnipsel reingestellt...
    also im Anhang nun noch die screenshots von dem Benutzereingabefenster (Size) und dem "TrueCrypt Volume Creation Wizard" Fenster
    ;)

  • schön, dann ist dein Problem ja gelöst, schön wäre es allerdings auch wenn du den Thread auf gelöst setzt. Einfach 1. Beitrag bearbeiten, Präfix (nähe Überschrift) ändern und speichern (absenden)

    PS.: das Einstellen der Screenshots war dann ja überflüssig, aber trotzdem danke,

    mfg autoBert