HotKeySet reagiert nicht immer

  • Hallo liebe Gemeinde,

    ich nutze in meinem script mehere Hotkeys:

    [autoit]

    HotKeySet("^1", "PMS")
    HotKeySet("^2", "IFC")
    HotKeySet("^3", "SYS")
    HotKeySet("^4", "POS")
    HotKeySet("^5", "BLANK")
    HotKeySet("^6", "fileup")
    HotKeySet("^7", "emailup")
    HotKeySet("^+1", "copycaseid")
    HotKeySet("^+2", "copycaseidadva")

    [/autoit]

    Nun habe ich das problem das die beiden:

    [autoit]


    HotKeySet("^6", "fileup")
    HotKeySet("^7", "emailup")

    [/autoit]

    nicht immer reagieren, teilweise erst beim 3. versuch, teilweise auch sofort.
    Die anderen Hotkeys machen keine Probleme

    [autoit]

    Func fileup()
    $nMsg = $MenuItemftp1
    EndFunc
    Func emailup()
    $nMsg = $MenuItemftp2
    EndFunc

    [/autoit]

    Mit $MenuItemftp1 und $MenuItemftp2 wird eine kleine GUI gestartet.

    Habt Ihr eine Idee woran das Liegen kann.

    Vielen Dank schon jetzt für die Hilfe.
    p.s.
    da mein Gesamtes Script sehr lang ist, habe ich es nicht gepostet.

    Einmal editiert, zuletzt von dabronko1 (25. Februar 2013 um 04:15)

  • autoBert
    Naja.
    Grundsätzlich hast du natürlich recht
    Ich gehe aber stark von so einem Skript aus (Grundaufbau):

    Spoiler anzeigen
    [autoit]


    HotKeySet("{F1}", "_Function")

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

    $hGUI = GUICreate("test", 250, 250)
    $idControl = GUICtrlCreateButton("Testbutton", 100, 100, 50, 50)
    GUISetState()

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

    While True
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case -3 ;EVENT_CLOSE
    Exit
    Case $idControl
    MsgBox(0, "", "Dummy betätigt")
    EndSwitch

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

    Sleep(3) ;Wenn noch mehr Controls vorhanden wären, würde auch mehr Zeit gebraucht...
    WEnd

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

    Func _Function()
    $iMsg = $idControl
    EndFunc

    [/autoit]

    @TE Sowas kann man so lösen:

    Spoiler anzeigen
    [autoit]


    #include <SendMessage.au3>

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

    HotKeySet("{F1}", "_Function")

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

    $hGUI = GUICreate("test", 250, 250)
    $idControl = GUICtrlCreateButton("Testbutton", 100, 100, 50, 50)
    $idControlDummy = GUICtrlCreateDummy()
    GUISetState()

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

    While True
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case -3 ;EVENT_CLOSE
    Exit
    Case $idControl, $idControlDummy
    MsgBox(0, "", "Button betätigt")
    EndSwitch

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

    Sleep(3) ;Wenn noch mehr Controls vorhanden wären, würde auch mehr Zeit gebraucht...
    WEnd

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

    Func _Function()
    GUICtrlSendToDummy($idControlDummy)
    EndFunc

    [/autoit]

    chess

  • Warum sollte man das nicht machen? Was ist eine bessere Möglichkeit?

    Edit: In eine Funktion auslagern und diese dann aufrufen?

    Da es hier doch einige falsch machen:

    Zitat von einem User dieses Forums

    Die Standard-Standart eines Flamingos ist einbeinig. ;)

  • Warum nicht?
    Also:
    Wenn man einen HotKey drückt, was passiert dann bei AutoIt?
    Die gegenwärtige Funktion wird erst beendet (AutoIt wartet auf Vollendung), dann wird zur HotKey-Funktion gesprungen.
    Diese wird ausgeführt, dann springt der "Zeiger" wieder zurück hinter die Funktion, die erst beendet werden musste.

    Unsere Main-Schleife sieht so aus:

    Unser Hotkey erzielt nur die gewünschte Wirkung, wenn er gedrückt wird, während das Skript im grünen Bereich ist, da bei allem im roten Bereich die Variable gesetzt und durch GUIGetMsg einfach wieder überschrieben wird.

    Und um das zu umgehen... Siehe meine Lösung im Vorpost.

    chess

  • Hi chesstiger,


    vielen Dank für deine Hilfe, funktioniert Prima!
    Die Hotkeys reagieren sofort bei jedem auslösen.

    an alle anderen natürlich auch vielen Dank für eure hilfe.

    Beste Grüße
    dabronko

  • Hotkeys blockieren das senden der Tasten. Wenn der Key weiter gegeben werden soll must du entweder den HotKey unregistrieren
    oder _IsPressed verwenden. (Find ich im allgemeinen eh besser^^)

    Ansonsten musste ich hier einfach noch mein Senf reinpressen bevor das geschlossen wird :D

    -