Selektierten Text aus ComboBox per ENTER und/oder Button starten

  • Hallo zusammen!

    Bin bereits seit einer gewissen Zeit am scripten per AutoIT, nun aber mit einer kleinen Gui-Anwendung an meine Grenzen gestoßen.

    Und zwar habe ich eine ComboBox erstellt aus der der Benuzer entweder per Dropdown-Menü oder aber per Eingabe eines Buchstabens einen der Einträge auswählen kann. Hat er die Auswahl erledigt, so kann er über einen Klick auf den Button "Starten" die ausgewählte Datei starten.

    [Blockierte Grafik: http://imageshack.us/photo/my-images/828/combobox.jpg/]

    Er soll aber ebenso nach Auswahl eines Eintrages über die ENTER-Taste die Anwendung starten können. Und genau da hakt es: habe mich schon durch diverse Forenbeiträge gewälzt, IF-Abfragen bzgl. "_IsPressed" eingebaut, aber viel weiter komme ich nicht. Schalte ich eine IsPressed-Abfrage vor oder nach der GUIGetMsg() wird die Anwendung u.U. zwei- oder dreifach gestartet (wenn der Focus z.B. auf dem Button liegt).

    [autoit]

    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $GUI_EVENT_MINIMIZE
    MsgBox(0, "", "Dialog minimized", 2)
    Case $msg = $GUI_EVENT_MAXIMIZE
    MsgBox(0, "", "Dialog restored", 2)

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

    Case $msg = $Button1

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

    ShellExecute ($starteAnwendung)

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

    EndSelect

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

    WEnd

    [/autoit]

    Habt ihr eine Idee wie ich dieses Problem lösen kann?


    Vielen Dank & Gruß

    Einmal editiert, zuletzt von Tupac (26. Oktober 2011 um 21:05)

  • Versuch`s Mal so:

    [autoit]

    HotKeySet("{ENTER}", "_ENTER") ;<=====

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

    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $GUI_EVENT_MINIMIZE
    MsgBox(0, "", "Dialog minimized", 2)
    Case $msg = $GUI_EVENT_MAXIMIZE
    MsgBox(0, "", "Dialog restored", 2)

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

    Case $msg = $Button1

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

    ShellExecute($starteAnwendung)

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

    EndSelect

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

    WEnd
    Func _ENTER()
    ShellExecute($starteAnwendung)
    EndFunc ;==>_ENTER

    [/autoit]

    Sollte eigentlich klappen....


    Gruß Mike

    • Offizieller Beitrag

    Warum würdest Du Hotkey vermeiden ?


    - sind auch wirksam, wenn dein Skript läuft, aber das Fenster nicht aktiv ist
    - es kann leicht zu Konflikten mit HotKeys vom System oder anderen Programmen kommen
    Mit GuiAcceleratorSet ist garantiert, dass der Hotkey ausschließlich in der zugeordneten GUI wirksam ist.
    Definiere mal einen Hotkey mit ENTER und wechsle dann mal parallel in einen Editor zum Schreiben. Bei jedem Zeilenumbruch (Enter) wird der HotKey in deinem Skript aktiviert. ;)
    (Kann man natürlich unterbinden, indem in die HK-Funktion eine Abfrage nach dem aktiven Fenster eingebunden wird).

  • Danke euch beiden für die Lösungen bzw. den Ansatz ;)
    Bin kurz nach dem Post auf einen Hinweis gestoßen, der mein Problem auch auf relativ einfachem Weg löst. Leider war mein Beitrag in der "Prüfung durch einen Moderator", so dass ich ihn nicht mehr entfernen konnte.

    Auf jeden Fall die weitere Möglichkeit: so wie ich es verstanden habe, kann man über "GUICtrlSetState($Button1, $GUI_DEFBUTTON)" den Focus direkt auf den Button legen.

    Wenn man dann in der ComboBox etwas eingibt und "ENTER" betätigt, startet automatisch die gewünschte Anwendung als wenn man den Button anklicken würde.

    Klappt in der Praxis tatsächlich bisher problemlos.


    Danke auf jeden Fall uns bis bald :)
    Grüße