Taste loslassen abfragen

  • Hallo,

    folgendes Problem:
    Ich habe ein Hotkeyset erstellt.

    Wenn ich die Plustaste gedrückt halte
    dann wird hochgezählt. OK!

    Das Problem:
    Ich muß aber ermitteln wann die Taste losgelassen wurde!

    Hier mein Code

    Spoiler anzeigen
    [autoit]


    HotKeySet("{NUMPADADD}", "plus")
    HotKeySet("{NUMPADSUB}", "minus")

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

    Global $Start = 0

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

    While 1
    ;~ Sleep(100)
    WEnd

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

    func plus()

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

    ToolTip($Start)
    $Start += 1
    ;Msgbox(0,"","es wurde bei: "& $Start &" losgelassen")
    endfunc

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

    func minus()

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

    $Start -= 1
    ToolTip($Start)
    ;Msgbox(0,"","es wurde bei: "& $Start &" losgelassen")
    endfunc

    [/autoit]


    Liebe Grüße
    :( Ilse

    Einmal editiert, zuletzt von Ilse (21. März 2012 um 08:45)

  • Schau dir mal den befehl :

    [autoit]

    _IsPressed()

    [/autoit]


    an
    Edit:
    Hier:

    [autoit]

    #include <Misc.au3>

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

    Global $Start = 0

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

    While 1
    If _IsPressed("6B") Then
    $Start += 1
    ToolTip($Start)
    EndIf
    If _IsPressed("6D") Then
    $Start -= 1
    ToolTip($Start)
    EndIf
    Sleep(100)
    WEnd

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

    Func plus()
    ToolTip($Start)
    $Start += 1
    EndFunc ;==>plus

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

    Func minus()
    $Start -= 1
    ToolTip($Start)
    EndFunc ;==>minus

    [/autoit]

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

    2 Mal editiert, zuletzt von xXxProGamerxXx (20. März 2012 um 18:37)

  • Die "saubere" Lösung wäre WM_KEYUP:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global Const $VK_ADD = 0x6B
    Global Const $VK_SUBTRACT = 0x6D

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

    Global $iStart = 0

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

    Global $hGui = GUICreate("Test")
    GUIRegisterMsg($WM_KEYDOWN, "WM_KEYDOWN")
    GUIRegisterMsg($WM_KEYUP, "WM_KEYUP")
    GUISetState(@SW_SHOW, $hGui)

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

    While GUIGetMsg() <> $GUI_EVENT_CLOSE
    WEnd

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

    Func WM_KEYDOWN($hWnd, $msg, $wParam, $lParam)
    Switch $wParam
    Case $VK_ADD
    $iStart += 1
    ToolTip("Add: " & $iStart)
    Case $VK_SUBTRACT
    $iStart -= 1
    ToolTip("Sub: " & $iStart)
    EndSwitch
    Return 'GUI_RUNDEFMSG'
    EndFunc ;==>WM_KEYDOWN

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

    Func WM_KEYUP($hWnd, $msg, $wParam, $lParam)
    Switch $wParam
    Case $VK_ADD, $VK_SUBTRACT
    MsgBox(0, "", "es wurde bei: " & $iStart & " losgelassen")
    EndSwitch
    Return 'GUI_RUNDEFMSG'
    EndFunc ;==>WM_KEYUP

    [/autoit]

    Allerdings setzt diese Variante ein GUI voraus...

    E

  • Hier mal meine Variante mit _IsPressed :

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    Global $i
    Opt("TrayMenuMode", 1)
    $Exit = TrayCreateItem("Beenden")
    $Dll = DllOpen("User32.dll")

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

    While 1
    sleep(1)
    If _IsPressed("6B",$DLL) Then
    Do
    sleep(20)
    $i += 1
    Until Not _IsPressed("6B",$DLL)
    MsgBox(64,"Plustaste losgelassen","Aktueller Status " & $i)
    EndIf
    If _IsPressed("6D",$DLL) Then
    Do
    sleep(20)
    $i -= 1
    Until Not _IsPressed("6D",$DLL)
    MsgBox(64,"Minustaste losgelassen","Aktueller Status " & $i)
    EndIf
    If TrayGetMsg() = $Exit Then
    DllClose($DLL)
    Exit
    EndIf
    WEnd

    [/autoit]