Hotkeyset Steuerungstate bleibt hängen

  • Hey Jungs und Mädels,

    Hab hier n kleines Problem.
    Mein script für die Arbeit soll per Hotkey in ein anderes Programm eine Laufende Nummer eintragen.
    Funzt auch gut so, bis auf den Umstand, das nach ausführen eines der Hotkeys manchmal einfach dei Steuerungstaste gedrückt bleibt.
    hab schon einiges versucht, aber noch auf keinen grünen Zweig gekommen.
    Der Fehler tritt in der Arbeit genauso auf, wie zu Hause.

    hier mein Script.

    Spoiler anzeigen
    [autoit]

    #Include <File.au3>
    Global $version=("Programmliste V0.3")
    Global $ini=("liste.ini")
    Global $logfile=(@username&"_Programmliste.txt")

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

    if iniread($ini,@username,"hk1","")="" Then
    FileWriteLine($ini," ")
    FileWriteLine($ini," ")
    FileWriteLine($logfile,"")
    IniWrite($ini,@username,"shortname","X")
    IniWrite($ini,@username,"shortnumber","4")
    IniWrite($ini,@username,"hk1","^!{F1}")
    IniWrite($ini,@username,"hk2","^!{F2}")
    IniWrite($ini,@username,"hk3","^!{F4}")
    IniWrite($ini,@username,"number","10000")
    EndIf

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

    $nxtnbr = TrayCreateItem("nächste Nummer")
    $logedit = TrayCreateItem("Liste")
    $iniedit = TrayCreateItem("Ini editieren")
    TrayCreateItem("")
    $info = TrayCreateItem("Info")
    TrayCreateItem("")
    $exit = TrayCreateItem("Exit")
    Opt("TrayMenuMode",1)

    Global $hk1=IniRead($ini,@username,"hk1","")
    Global $hk2=IniRead($ini,@username,"hk2","")
    Global $hk3=IniRead($ini,@username,"hk3","")
    HotKeySet($hk1,"_paste")
    HotKeySet($hk2,"_paste")
    HotKeySet($hk3,"_numchange")

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

    While 1
    $msg = TrayGetMsg ()
    select
    case $msg=$exit
    exit
    case $msg=$logedit
    Run("Notepad.exe "&$logfile)
    case $msg=$nxtnbr
    _numchange ()
    case $msg=$iniedit
    _iniedit ()
    case $msg=$info
    MsgBox(0,@scriptname,$version&@crlf&"Sponsored by Michi")
    EndSelect
    sleep(3)
    WEnd

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

    Func _paste ()
    FileClose ($ini)
    FileClose ($logfile)
    ;~ ProcessClose ("notepad.exe")
    $number=IniRead($ini,@username,"number","X")
    $shortname=IniRead($ini,@username,"shortname","X")
    $shortnumber=IniRead($ini,@username,"shortnumber","0")
    $pgmname=($shortname&$number)
    _FileWriteToLine($logfile,1, $pgmname&" "&@MDAY&"."&@MON&" "&@HOUR&":"&@MIN&":"&@SEC)
    send("{HOME}")
    Send("+{END}")
    send($pgmname)
    Send("{TAB}")
    send("{HOME}")
    Send("+{END}")
    if @HotKeyPressed = $hk2 Then $pgmname=($shortnumber&$number)
    send($pgmname)
    $number =(number($number)+1)
    IniWrite($ini,@username,"number",$number)
    EndFunc

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

    Func _numchange ()
    $number=IniRead($ini,@username,"number","X")
    $number = InputBox(@scriptname,"Gib die nächste Programmnummer ein!",$number)
    if @error =0 then IniWrite($ini,@username,"number",$number)
    EndFunc

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

    func _iniedit ()
    Run("Notepad.exe "&$ini)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Das Problem ist auch, dass es nicht bei allen auftritt. ( Ich hatte das Problem z.B. noch nie)
    Verwendest du auch die neueste Stabel 3.2.12.1 ?
    Sonstvielleicht auch mal mit der BETA testen :)

  • habs jetzt mit der Beta compiliert, und auch keine Änderung!

    Am Kopf kratz ?(

    wie es aussieht bleiben tatsächlich die Ctrl und die Alt-Taste hängen.
    Wenn ich die noch mal ohne der F-Taste betätige geht wieder alles wie es soll.
    Wenn ich das aber über das script nachsimuliere bringt das gar nix.

  • Mein Mitgefühl, Vollnoob.

    Der andere Thread, der dir nahe gelegt wurde, stammt von mir. Konnte das Problem auch nicht lösen, nur ein wenig umgehen.
    Benutz mal, wenn möglich, als Hotkeys die NUMPAD-Zahlen, statt STRG und ALT. So funktioniert es bei mir. Keine merkwürdigen Beeinflussungen mehr.
    Ist zwar ein wenig umständlicher, je nachdem was du zu tun gedenkst, aber wenn es gar nicht geht sonst...

    LG

  • Funktioniert auch nicht, heul ;( !

    Jetzt bin ich bei _ispressed gelandet.

    lassen sich über autoit der input spezieller Tasten sperren?

    zb. If _ispressed("??",$dll) and _ispressed("??",$dll) Then block F1?

    Um eine ähnliche Funktion wie HotkeySet zu simulieren.


    Mit diesem Hotkey-Bug kann ich leider nicht Leben. (Nach Baum und Seil umschau)

  • Vollnoob, hattest du das mal versucht, was ich meinte?
    Das du die Numpad-Zahlen als Hotkeys definierst? SO bekomme ich diesen Bug nicht. Aber je nachdem, was du vorhast, kann es eben recht unpraktisch sein. Aber besser, als wenn es agr nicht funktioniert.

    _IsPressed hab ich mal gelesen, mich aber nicht damit beschäftigt, und ansonsten kenne ich mich leider auch nichtgut aus.
    Viel Glück.

    LG

  • Danke für den Tip EXO, aber das Numpad stellt in meinem Fall keine vernünftige Alternative dar.

    Dazu kommt noch, dass mein Proggy absolut dausicher sein muß.

    Ausserdem wäre ich auch an einer algemeinen Lösung des Hotkeyproblems interessiert.

  • Ja, ich auch.
    Da mein Programm eh erstmal für den Eigengebrauch ist, kann ich das mit den Numpads verkraften. Wenn sich das allgemeine Problem klären würde, wäre es mir allerdings auch wohler.

    Vllt klärt es sich ja irgendwann, oder der "Bug" ist in einer nächsten Version von AutoIt behoben.

    LG

  • Ist auch möglich.
    Wer bräuchte schon Autoit, wenn Windoof nicht verbuggt wäre ;)

    Hab mir jetzt mit der Maustaste als Hotkey beholfen, jetzt brauch ich nicht mal mehr die Hand von der Maus zu nehmen. (freu!!!!)

    Spoiler anzeigen
    [autoit]

    #Include <File.au3>
    #include <Misc.au3>

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

    $dll = DllOpen("user32.dll")
    Global $version=("Programmliste V0.5")
    Global $ini=("liste.ini")
    Global $hk1=IniRead($ini,@username,"hk1","")
    Global $hk2=IniRead($ini,@username,"hk2","")
    Global $hk3=IniRead($ini,@username,"hk3","")
    Global $logfile=(@username&"_Programmliste.txt")
    if not FileExists($logfile) then FileWriteLine($logfile,"")

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

    if iniread($ini,@username,"hk1","")="" Then
    FileWriteLine($ini," ")
    FileWriteLine($ini," ")
    IniWrite($ini,@username,"shortname","X")
    IniWrite($ini,@username,"shortnumber","4")
    IniWrite($ini,@username,"hk1","{F1}")
    IniWrite($ini,@username,"hk2","{F2}")
    IniWrite($ini,@username,"hk3","{F4}")
    IniWrite($ini,@username,"number","10000")
    EndIf

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

    $nxtnbr = TrayCreateItem("nächste Nummer")
    $logedit = TrayCreateItem("Liste")
    $iniedit = TrayCreateItem("Ini editieren")
    TrayCreateItem("")
    $info = TrayCreateItem("Info")
    TrayCreateItem("")
    $exit = TrayCreateItem("Exit")
    Opt("TrayMenuMode",1)

    While 1
    $msg = TrayGetMsg ()
    select
    case $msg=$exit
    DllClose($dll)
    exit
    case $msg=$logedit
    Run("Notepad.exe "&$logfile)
    case $msg=$nxtnbr
    _numchange ()
    case $msg=$iniedit
    _iniedit ()
    case $msg=$info
    MsgBox(0,@scriptname,$version&@crlf&"Sponsored by Michi")
    EndSelect

    if _IsPressed("01",$dll) Then
    _hkset ()
    while _IsPressed("01",$dll)
    sleep (1)
    WEnd
    _hkkill ()
    EndIf
    sleep(1)
    WEnd

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

    Func _hkset ()
    HotKeySet($hk1,"_paste")
    HotKeySet($hk2,"_paste")
    HotKeySet($hk3,"_numchange")
    EndFunc

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

    Func _hkkill ()
    HotKeySet($hk1)
    HotKeySet($hk2)
    HotKeySet($hk3)
    EndFunc

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

    Func _paste ()
    _hkkill ()
    FileClose ($ini)
    FileClose ($logfile)
    $number=IniRead($ini,@username,"number","X")
    $shortname=IniRead($ini,@username,"shortname","X")
    $shortnumber=IniRead($ini,@username,"shortnumber","0")
    $pgmname=($shortname&$number)
    _FileWriteToLine($logfile,1, $pgmname&" "&@MDAY&"."&@MON&"."&@YEAR&" "&@HOUR&":"&@MIN&":"&@SEC)
    send("{HOME}+{END}"&$pgmname&"{TAB}{HOME}+{END}")
    if @HotKeyPressed = $hk2 Then $pgmname=($shortnumber&$number)
    send($pgmname)
    $number =(number($number)+1)
    IniWrite($ini,@username,"number",$number)
    EndFunc

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

    Func _numchange ()
    _hkkill ()
    $number=IniRead($ini,@username,"number","X")
    $number = InputBox(@scriptname,"Gib die nächste Programmnummer ein!",$number)
    if @error =0 then IniWrite($ini,@username,"number",$number)
    EndFunc

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

    func _iniedit ()
    Run("Notepad.exe "&$ini)
    EndFunc

    [/autoit]
  • Hi,

    mir ist bewußt, dass das Thema schon alt ist, aber ich hatte heute das gleiche Problem und erst mal keine Lösung gefunden.

    Aber jetzt habe ich doch eine :) ...

    Um z.B. alles zu markieren und zu kopieren, verwende man einfach anstelle von:

    [autoit]


    Send("^a")
    Send("^c")

    [/autoit]

    dieses hier:

    [autoit]


    Send("{CTRLDOWN}")
    Send("a")
    Send("c")
    Send("{CTRLUP}")

    [/autoit]

    Das hat geholfen, die STRG-Taste bleibt nicht mehr hängen (zumindest bei mir).

    Gruß
    Trainer