Comboauswahl mit Funktionen verknüpfen ohne Erfolg - Anfänger

  • Hallo zusammen,

    ich beschäftige mich seit gerade mal ein paar Tagen erst mit Autoit und möchte folgendes umsetzen, was bei mir nicht funktioniert.

    In einer Combobox gibt es 2 Wärte zur Auswahl.
    Wähle ich nun "auswahl1" aus, dann soll die CMD-Konsole mit folgenden Pfad nach Drücken von den Button "GO" geöffnet werden.
    Bei "auswahl2" und "GO" dann CDM mit anderen Pfad.

    Könnt Ihr mir helfen und mir sagen, was ich anpassen muss, bzw. wo ich falsch denke?

    Danke vorab und Grüße
    Kassi

    Einmal editiert, zuletzt von Kassi84 (29. November 2012 um 16:25) aus folgendem Grund: Thema gelöst. Danke

  • So auf Anhieb würde ich sagen du musst "If $auswahlvar2 = "auswahl2" then" durch "ElseIf $auswahlvar2 = "auswahl2" then" ersetzen. Und sonst müsstest du noch etwas genauer beschreiben was nicht funktioniert (gibt es z.B. einen Fehler).

    Gruss Shadowigor

  • Die Syntax deiner If-Abfragen ist falsch. Richtig:

    [autoit]

    Case $GO ;hier bestimmst du welcher button in diesem fall eben button1
    $auswahlvar2 = GUICtrlRead($Combo2)
    If $auswahlvar2 = "auswahl1" Then _funktion1() ;Hier bestimmst du wie die Funktion heisst die bei einem klick auf dem Button aus geführt wird
    If $auswahlvar2 = "auswahl2" Then _funktion2() ;Hier bestimmst du wie die Funktion heisst die bei einem klick auf dem Button aus geführt wird
    EndSwitch

    [/autoit]

    Edit @ShadowIgors Version ist eleganter:

    [autoit]

    Case $GO ;hier bestimmst du welcher button in diesem fall eben button1
    $auswahlvar2 = GUICtrlRead($Combo2)
    If $auswahlvar2 = "auswahl1" Then
    _funktion1() ;Hier bestimmst du wie die Funktion heisst die bei einem klick auf dem Button aus geführt wird
    ElseIf $auswahlvar2 = "auswahl2" Then
    _funktion2() ;Hier bestimmst du wie die Funktion heisst die bei einem klick auf dem Button aus geführt wird
    EndIf

    [/autoit]

    wenn es aber noch mehr werden solltest du auf jeden Switch Case EndSwich nehmen. Für einfache Erweiterungen könntest du auch an das Verwenden eier INI nachdenken, Beispiel: [Beispiel] MiniUrl-Manager (kleiner Webseitenverwalter)

    nfg autoBert

    Einmal editiert, zuletzt von autoBert (25. Oktober 2012 um 16:26)

  • OK super es hat jetzt Dank euch funktioniert. Ich werde es jetzt noch erweitern, wobei ich hier wieder auf eure Hilfe angewiesen sein werde.
    folgendes möchte ich dann im endeffekt umsetzten:

    Variante1: Es soll im Endeffekt ein Aufruf über CMD werden, welcher über 2 Comboboxen und einer Eingabebox gefüllt wird.

    Variante 2: Zwei Aufrufe über CMD wird durch 2 Comboboxen und 2 Eingabeboxen gefüttert. Wobei sich bei Combobox2 entscheidet welcher der beiden Aufrufe durch Combobox1 und einer der beiden Eingabeboxen gefüttert wird.

    Es klingt leichter als is in der Umsetzung sein wird.

    Gleich folgt mein erweiterter Versuch.

    Grüße
    Kassi

  • Gleich folgt mein erweiterter Versuch.

    [autoit]

    Case $GO ;hier bestimmst du welcher button in diesem fall eben button1
    $auswahlvar2 = GUICtrlRead($Combo2)
    If $auswahlvar2 = "auswahl1" Then
    _funktion1() ;Hier bestimmst du wie die Funktion heisst die bei einem klick auf dem Button aus geführt wird
    ElseIf $auswahlvar2 = "auswahl2" Then
    _funktion2() ;Hier bestimmst du wie die Funktion heisst die bei einem klick auf dem Button aus geführt wird
    EndIf

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

    Func _funktion1 ()
    Run ("CMD", "C:\tmp")

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

    Exit
    EndFunc

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

    Func _funktion2 ()
    Run ("CMD", "C:\")

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

    Wie kann ich jetzt in den Funktionsaufrufen eine Variable hinzufügen, so dass bei Auswahl von der Combobox2 ($Combo2) in der jeweiligen funktion die Variable der Combobox1 ($Combo1) vorhanden ist und sogar noch eine Variable aus einem Freitextfeld ($input1) übergeben werden kann.

    Bsp: C:\[Variable aus $combo1] abc123 [Variable aus $input1] ABC321

    Mir fehlt diesmal bereits der richtige Ansatz.

    Grüße und Danke vorab
    Kassi

  • [autoit]


    #include <ComboConstants.au3>
    ;~ #include <GUIConstantsEx.au3> ;$GUI_EVENT_CLOSE

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

    #region ### START Koda GUI section ###
    $Form1_1 = GUICreate("Form1", 615, 438, 193, 122)
    $GO = GUICtrlCreateButton("GO", 528, 384, 81, 49)
    $Combo1 = GUICtrlCreateCombo("1", 160, 40, 137, 25, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "1|2|3")
    $Combo2 = GUICtrlCreateCombo("Auswahl 1", 8, 40, 137, 25, $CBS_DROPDOWNLIST)
    GUICtrlSetData($Combo2, "Auswahl 1|Auswahl 2")
    $input1 = GUICtrlCreateInput("", 8, 104, 289, 21)
    $Name = GUICtrlCreateLabel("designed by Kassi", 480, 8, 108, 17)
    $Label1 = GUICtrlCreateLabel("Auswahl", 8, 16, 107, 17)
    $Label2 = GUICtrlCreateLabel("Produktart", 160, 16, 53, 17)
    $Label3 = GUICtrlCreateLabel("Eingabefeld für Auswahl 1", 8, 80, 365, 17)
    $input2 = GUICtrlCreateInput("", 8, 176, 121, 21)
    $Label4 = GUICtrlCreateLabel("Eeingabefeld für Auswahl 2", 8, 144, 434, 17)

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

    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While True
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3 ;$GUI_EVENT_CLOSE
    ExitLoop
    Case $GO ;hier bestimmst du welcher button in diesem fall eben button1
    $auswahlvar2 = GUICtrlRead($Combo2)
    Switch $auswahlvar2
    Case "Auswahl 1"
    ;~ Run("CMD", "C:\temp\") ; ist "C:\temp" oder "C:\tmp" vorhanden !?

    Case "Auswahl 2"
    Run("CMD", "C:\")

    EndSwitch
    ExitLoop
    EndSwitch
    WEnd
    ; Ende

    [/autoit]
  • So?

    [autoit]

    "C:\" & GUICtrlRead($combo1) & " abc123 " & GUICtrlRead($input1) & " ABC321"

    [/autoit]


    Shadowigor: Ja so habe ich es mir vorgestellt, jedoch funktioniert es nicht. Fehlen hier Variablen, die vorher gesetzt werden müssen.
    Aktueller Stand:

    [autoit]

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=c:\abfragegui.kxf
    $Form1_1 = GUICreate("Form1", 615, 438, 193, 122)
    $GO = GUICtrlCreateButton("GO", 528, 384, 81, 49)
    $Combo1 = GUICtrlCreateCombo("", 160, 40, 137, 25, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "A1|B2|C3")
    $Combo2 = GUICtrlCreateCombo("", 8, 40, 137, 25, $CBS_DROPDOWNLIST)
    GUICtrlSetData($Combo2, "auswahl1|auswahl2")
    $input1 = GUICtrlCreateInput("", 8, 104, 289, 21)
    $Name = GUICtrlCreateLabel("by Kassi", 480, 8, 108, 17)
    $Label1 = GUICtrlCreateLabel("Auswahl", 8, 16, 107, 17)
    $Label2 = GUICtrlCreateLabel("Befehl", 160, 16, 53, 17)
    $Label3 = GUICtrlCreateLabel("Eeingabefeld Freitext zu auswahl1", 8, 80, 365, 17)
    $input2 = GUICtrlCreateInput("", 8, 176, 121, 21)
    $Label4 = GUICtrlCreateLabel("Eingabefeld Freitext zu auswahl2", 8, 144, 434, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GO ;hier bestimmst du welcher button in diesem fall eben button1
    $auswahlvar2 = GUICtrlRead($Combo2)
    If $auswahlvar2 = "auswahl1" Then
    _funktion1() ;Hier bestimmst du wie die Funktion heisst die bei einem klick auf dem Button aus geführt wird
    ElseIf $auswahlvar2 = "auswahl2" Then
    _funktion2() ;Hier bestimmst du wie die Funktion heisst die bei einem klick auf dem Button aus geführt wird
    EndIf
    EndSwitch
    WEnd

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

    Func _funktion1 ()
    Run ("CMD", "C:\" & GUICtrlRead($Combo1) & " abc123 " & GUICtrlRead($input1) & " ABC321")

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

    Exit
    EndFunc

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

    Func _funktion2 ()
    Run ("CMD", "C:\tmp")

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

    Exit
    EndFunc

    [/autoit]


    Grüße
    Kassi

  • Nach meinem Verständnis ist doch GUICtrlRead ein Befehl zum Auslesen, oder? Wenn ich diesen ausgelesenen Wert jetzt nach C:\ ausgeben möchte, brauch ich doch einen Ausgabebefehl oder?

  • Also wie jetzt? Du willst die Werte nach C:\ ausgeben? Heisst das du willst die in eine Datei in C:\ schreiben oder du willst eine Datei in C:\ erstellen mit diesem Namen oder etwas anderes?

  • Also wie jetzt? Du willst die Werte nach C:\ ausgeben? Heisst das du willst die in eine Datei in C:\ schreiben oder du willst eine Datei in C:\ erstellen mit diesem Namen oder etwas anderes?


    Ich möchte z.B. durch eine Funktion einen Befehl in der CMD ausführen. Zum Besispiel C:\ping und durch eine Kombobox definierte IP-Adressen hinterlegen, welche sich dann nach C:\ping zeigt und ausführt.

    Ich hoffe ich drücke mich nicht zu kompliziert aus.

  • Er meint einfach die Eingabezeile (cmd).
    Da steht dann in manchen fällen:

    Code
    C:\>

    lg chess


    Ja genau die meinte ich. Ich möchte mit der Kombobox die Eingabezeile vervollständigen, so dass vordefinierte Ausgabewerte dort in der Eingabezeile erscheinen.

  • Achso. Dann musst du den GUICtrlRead befehl einfach im 'WorkingDir' Parameter von Run einsetzen. Oder wenn du den Befehl immer in C:\ ausführen willst gibst du einfach 'C:\' als WorkingDir an. Als Programm gibst du @ComSpec & "/c " & $befehl. Also z.B.

    [autoit]

    Run(@ComSpec & " /c " & $befehl, "C:\")

    [/autoit]
  • Bei mir funktioniert es ... ich weiss ja nicht welchen Befehl du ausführen magst, den musst halt noch eintragen/auskommentieren.

    Außerdem war ich so frei und hab mir den Code ein wenig umgestellt von den Handels und der Anordnung. Kleiner Tipp, schreibe deine GUIs lieber von Hand ;)

    Spoiler anzeigen
    [autoit]

    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>

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

    $hGUI = GUICreate("GUI", 295, 200)
    $hLabel1 = GUICtrlCreateLabel("Auswahl 1 oder Auswahl 2", 5, 5, 125, 20)
    $hCombo1 = GUICtrlCreateCombo("", 5, 30, 137, 25, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "Auswahl 1|Auswahl 2")
    $hLabel2 = GUICtrlCreateLabel("Produktart", 150, 5, 53, 20)
    $hCombo2 = GUICtrlCreateCombo("", 150, 30, 137, 25, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "1|2|3")
    $hLabel3 = GUICtrlCreateLabel("Eingabefeld für Auswahl 1", 5, 60, 130, 20)
    $hInput1 = GUICtrlCreateInput("", 5, 85, 280, 20)
    $hLabel4 = GUICtrlCreateLabel("Eingabefeld für Auswahl 2", 5, 110, 130, 20)
    $hInput2 = GUICtrlCreateInput("", 5, 135, 280, 20)
    $gGoButton = GUICtrlCreateButton("GO", 5, 160, 80, 25)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _exit()
    Case $gGoButton
    If GUICTRLRead($hCombo1) = "Auswahl 1" Then
    _runCMD(@TempDir) ;Ich glaube "C:\tmp" ist so nicht korrekt ...
    ;schonmal @TempDir angeschaut?
    ElseIf GUICTRLRead($hCombo1) = "Auswahl 2" Then
    _runCMD("C:\")
    EndIf
    EndSwitch
    WEnd

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

    Func _runCMD($hWorkingdir)
    ;~ Run (@ComSpec & " /c " & 'dir' , $hWorkingdir) ;Wenn du direkt über die CMD etwas ausführen willst.
    Run ("cmd.exe" , $hWorkingdir) ;Wenn du die CMD nur öffnen willst.
    _exit()
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    Grüße

    Grüße Yaerox

    Grüne Hölle

    Einmal editiert, zuletzt von Yaerox (28. November 2012 um 08:58)

  • Vielen Dank an Euch allen. Habs jetzt mit Shadowigor's entscheidenen Hinweis hinbekommen, so wie ich es mir vorgestellt hatte. Das Gerüst steht jetzt. Jetzt kommt das Feintuning. :D
    Thread kann geschlossen werden.

    Grüße
    Kassi


  • Hier werden nur Themen geschlossen die gegen die Forenregeln verstossen. Du solltest es aber auf gelöst setzen. Einfach Eröffnungsbeitrag bearbeiten, Präfix umstellen und absenden.

    mfg autoBert


    Upps. OK wird gemacht. Danke für den Hinweis.
    Gruß Kassi