STRG/SHIFT/ALT-Tasten "hängen" nach HotKeySet

  • Hallo zusammen,

    ich habe immer wieder das Problem, dass AutoIt den "State" der Tasten nach einem Shortcut nicht mehr zurücksetzt. Einfaches Beispiel:

    [autoit]

    #include <date.au3>

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

    ;Shortcut setzen
    Opt("GUIOnEventMode", 1)
    HotKeySet("+^d", "type_date")

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

    ;Däumchen drehen und auf Shortcut warten ("Watchdog")
    While 1
    Sleep(1000)
    WEnd

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

    func type_date()

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

    ;Datum zusammenbauen und abschicken
    $date = StringRegExpReplace(_NowCalc(), "(\d\d\d\d)/(\d\d)/(\d\d) \d\d:\d\d:\d\d", "$1-$2-$3")
    Send($date)

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

    EndFunc

    [/autoit]

    Dieses Skript tippt einfach nur das aktuelle Datum, wenn der Nutzer STRG+SHIFT+D drückt. Allerdings bleiben die Tasten STRG und SHIFT hinterher im "gedrückten" Zustand was unter Windows natürlich für komplettes Chaos sorgt. Wenn man die Tasten danach nochmal einzeln drückt dann endet der Spuk.

    Ich habe jetzt schon versucht diesen Zustand mit Hilfe der KeyUp-Funktion manuell zu beheben - ohne Erfolg. Kennt jemand eine Lösung für das Problem?

    Grüße,
    spyro

    • Offizieller Beitrag

    Hallo

    Am saubersten wäre es so. Das Problem ist, dass AutoIt zu schnell ist (dass ich das mal sage... :P ). Du hast noch SHIFT und STRG gedrückt, und da fängt AutoIt schon mit dem Send befehl an, das mag AutoIt gar nicht.

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    #include <Misc.au3>

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

    ;Shortcut setzen
    Opt("GUIOnEventMode", 1)
    HotKeySet("+^d", "type_date")

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

    ;Däumchen drehen und auf Shortcut warten ("Watchdog")
    While 1
    Sleep(1000)
    WEnd

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

    Func type_date()
    HotKeySet("+^d");Setze STRG+SHIFT+D frei, ist eigentlich nicht so wichtig, aber falls man STRG + SHIFT + D z.B. 5 Sekunden lang drückt (warum auch immer) wird die Funktion trotzdem nur einmal aufgerufen
    While _IsPressed(11) Or _IsPressed(10) Or _IsPressed(44);Solange STRG oder SHIFT oder D gedrückt ist nichts machen
    Sleep(50)
    WEnd
    ;Datum zusammenbauen und abschicken
    $date = StringRegExpReplace(_NowCalc(), "(\d\d\d\d)/(\d\d)/(\d\d) \d\d:\d\d:\d\d", "$1-$2-$3")
    Send($date)
    HotKeySet("+^d", "type_date");setze STRG+SHIFT+D wieder
    EndFunc ;==>type_date

    [/autoit]

    So sollte es aber auch funktionieren:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>

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

    ;Shortcut setzen
    Opt("GUIOnEventMode", 1)
    HotKeySet("+^d", "type_date")

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

    ;Däumchen drehen und auf Shortcut warten ("Watchdog")
    While 1
    Sleep(1000)
    WEnd

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

    Func type_date()
    ;Datum zusammenbauen und abschicken
    $date = StringRegExpReplace(_NowCalc(), "(\d\d\d\d)/(\d\d)/(\d\d) \d\d:\d\d:\d\d", "$1-$2-$3")
    Send($date)
    Send("{+ up}{^ up}")
    EndFunc ;==>type_date

    [/autoit]


    Gruß
    Spider

  • super nach einer Funktion wie _IsPressed($Key) hab ich Ewigkeiten gesucht. Vielen Dank auch =D

    Problem gelöst!