seltsames Hotkeyset verhalten.

  • ich benutze einen barcode scanner der Felder in einer GUI füllt. Der Barcode wird immer mit einem Enter abgeschlossen. Also benutze ich diese Funktion, damit innerhalb der gui mit enter in das nächste Feld gesprungen wird und in allen anderen Fenstern einfach ENTER gesendet wird:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{ENTER}", "_do")

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

    Func _do() ;wenn das Feld moveto gewählt ist wird Enter zur funktion Button Save. und drückt down, damit der Ort angezeigt wird.
    If ControlGetFocus("Barcode Erfassung - V" & $version) = "Edit3" Then
    $test = StringLeft(GUICtrlRead($inp_moveto), 5)
    if $test < 25000 OR $test > 25999 Then
    Beep(250, 200)
    MsgBox(16, "read error", "Please, reset the form and scan the Barcode again.")
    GUISetState(@SW_HIDE, $main_form_1)
    _main()
    Else
    sleep(200)
    send("{DOWN}")
    GUICtrlSetState($inp_barcode, $GUI_FOCUS)
    Beep(2000, 100)
    EndIf
    Else
    HotKeySet("{Enter}")
    Send("{Enter}")
    HotKeySet("{Enter}", "_do")
    EndIf
    EndFunc ;==>_do

    [/autoit]

    Das Funktioniert in den meisten Anwendungen auch sehr gut. Es scheinen die Std. Windows Anwendungen damit klar zu kommen, allerdings gibt es eine Anwendungen von Fa. CPA (Australien), die das Enter durch den Hotkeyset nicht verschluckt, sondern ganz normal ausführt und dann natürlich das Send("{Enter}") nochmal als Enter annimmt. Was ziemllich blöd ist, weil dann zweimal Enter gedrückt wird.

    Hat sowas ähnlichen schonmal jemand beobachtet?

    Ich habe dann versucht die Fenster der Problem Software einfach aus zu schließen, indem ich mit

    [autoit]

    if winactive("titel") usw...

    [/autoit]

    Allerdings hat der Titel der Problem Anwendung nie eine Konstaten Teil.

    Hat jemand einen Tipp für mich?

    Habe auch versucht das mit Hotstring.au3 also Hotstringset zu lösen, aber da kann man scheinbar nur Buchstaben eingeben, denn {Enter} nimmt er leider nicht. Hotstringset hätte den Vorteil, dass es die Enter taste nicht löscht, wie Hotkeyset.

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    2 Mal editiert, zuletzt von franzp (2. Oktober 2008 um 18:40)

  • _ispressed scheint mit dem Enter des Barcodes Scanners nichts anfangen zu können. Mit der Enter Taste der Tastatur funktioniert es super, allerdings schickt der Scanner 5 Zahlen und dann ein Enter. Das Enter wird sogar als "0D" in den Barcode Scanner gespeichert. Also genau dieses Ascii "0D" auf das _Ispressed wartet.. Ziemlich blöd.

    noch jemand eine Idee? ^^

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    • Offizieller Beitrag

    Hallo,

    versuchs mal so, so in etwas wurde es auch in Galenda gelöst:

    Spoiler anzeigen
    [autoit]

    AdlibEnable("_Hotkeys", 500)

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

    Func _Hotkeys ()
    If WinActive("Barcode Erfassung - V" & $version) Then
    HotKeySet("{ENTER}", "_do")
    Else
    HotKeySet("{ENTER}")
    EndIf
    EndFunc

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

    Func _do() ;wenn das Feld moveto gewählt ist wird Enter zur funktion Button Save. und drückt down, damit der Ort angezeigt wird.
    If ControlGetFocus("Barcode Erfassung - V" & $version) = "Edit3" Then
    $test = StringLeft(GUICtrlRead($inp_moveto), 5)
    if $test < 25000 OR $test > 25999 Then
    Beep(250, 200)
    MsgBox(16, "read error", "Please, reset the form and scan the Barcode again.")
    GUISetState(@SW_HIDE, $main_form_1)
    _main()
    Else
    sleep(200)
    send("{DOWN}")
    GUICtrlSetState($inp_barcode, $GUI_FOCUS)
    Beep(2000, 100)
    EndIf
    Else
    AdlibDisable()
    HotKeySet("{ENTER}")
    Send("{ENTER}")
    AdlibEnable("_Hotkeys", 500)
    EndIf
    EndFunc ;==>_do

    [/autoit]

    Edit: Else-Zweig in _do-Funktion integriert.

  • aber in dieser Einstellung nimmer er doch gar kein Enter mehr entgegen.
    Nur wenn mein GUI geöffnet ist und dann auch nur wenn edit3 ausgewählt ist.

    Spoiler anzeigen
    [autoit]


    AdlibEnable("_Hotkeys", 500)

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

    Func _Hotkeys ()
    If WinActive("Barcode Erfassung - V" & $version) Then
    HotKeySet("{ENTER}", "_do")
    Else
    HotKeySet("{ENTER}")
    EndIf
    EndFunc

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

    Func _do() ;wenn das Feld moveto gewählt ist wird Enter zur funktion Button Save. und drückt down, damit der Ort angezeigt wird.
    If ControlGetFocus("Barcode Erfassung - V" & $version) = "Edit3" Then
    $test = StringLeft(GUICtrlRead($inp_moveto), 5)
    if $test < 25000 OR $test > 25999 Then
    Beep(250, 200)
    MsgBox(16, "read error", "Please, reset the form and scan the Barcode again.")
    GUISetState(@SW_HIDE, $main_form_1)
    _main()
    Else
    sleep(200)
    send("{DOWN}")
    GUICtrlSetState($inp_barcode, $GUI_FOCUS)
    Beep(2000, 100)
    EndIf
    Else
    HotKeySet("{ENTER}")
    Send("{ENTER}")
    EndIf
    EndFunc ;==>_do

    [/autoit]

    so macht er es bei mir.

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    3 Mal editiert, zuletzt von franzp (2. Oktober 2008 um 18:36)

    • Offizieller Beitrag

    Hallo,

    die Funktion _Hotkeys wird alle 500ms aufgerufen und prüft ob das aktive Fenster dein Programm ist, ist das der Fall wird der Hotkey auf deine Funktion gesetzt. Ansonsten wird der Hotkey gelöscht und die Entertaste funktioniert also ganz normal!

    Oder vllt. doch besser so:

    Spoiler anzeigen
    [autoit]

    AdlibEnable("_Hotkeys", 500)

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

    Func _Hotkeys ()
    If ControlGetFocus("Barcode Erfassung - V" & $version) = "Edit3" Then
    HotKeySet("{ENTER}", "_do")
    Else
    HotKeySet("{ENTER}")
    EndIf
    EndFunc

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

    Func _do() ;wenn das Feld moveto gewählt ist wird Enter zur funktion Button Save. und drückt down, damit der Ort angezeigt wird.
    $test = StringLeft(GUICtrlRead($inp_moveto), 5)
    if $test < 25000 OR $test > 25999 Then
    Beep(250, 200)
    MsgBox(16, "read error", "Please, reset the form and scan the Barcode again.")
    GUISetState(@SW_HIDE, $main_form_1)
    _main()
    Else
    sleep(200)
    send("{DOWN}")
    GUICtrlSetState($inp_barcode, $GUI_FOCUS)
    Beep(2000, 100)
    EndIf
    EndFunc ;==>_do

    [/autoit]
  • ich seh den unterschied gerade nicht zwischen deiner ersten und letzten version... Aber vielen vielen Dank.
    Die ersten Tests sehen sehr gut aus! Scheint zu klappen.


    Danke
    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    • Offizieller Beitrag

    In der 1. Funktion wird der Hotkey gesetzt wenn das Fenster aktiv ist und in der 2. wenn das Control den Focus hat.

  • ja stimmt, das ist noch eine bessere Lösung ! :thumbup:
    Wobei meine dann auch funktionieren würde.

    Danke nochmal!

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---