Hooks - WM_KEYUP verschlucken?

  • Hallo, ich würde gerne die WM_KEYUP Message auf einer bestimmten Taste komplett für das System verschlucken. Es soll also simuliert werden dass die Taste weiterhin gedrückt ist obwohl ich sie bereits losgelassen habe. Beim erneuten Drücken soll dann die WM_KEYUP Message wieder durchgelassen werden damit die Taste wieder "gelöst" werden kann. Ich hoffe es ist verständlich wie ich das meine.

    Im folgendem Skript habe ich versucht mit Hooks zu arbeiten, jedoch scheint dies nicht ganz zu klappen. Die Versuchstaste ist hier das "F":

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=C:\Program Files (x86)\AutoIt3\Icons\MyAutoIt3_Blue.ico
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    #include <Misc.au3>
    #include <WinAPI.au3>
    #include <WinAPISys.au3>
    #include <WindowsConstants.au3>

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

    Opt('TrayAutoPause', 0)
    Opt('TrayMenuMode', 1)

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

    Global Const $g_sKey = _
    'ML8JC05IzZlvugyW' & _
    '9kKUesT6aBENBbVc' & _
    'dUJ56fFrHHkpp7zg' & _
    'oHJrD7mOslRw7Oeh'

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

    _Singleton($g_sKey)

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Global $g_idExit = TrayCreateItem('Exit')

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Global $g_hLowLevelKeyboardProc = DllCallbackRegister(_LowLevelKeyboardProc, 'lresult', 'int;wparam;lparam')
    Global $g_hModuleHandle = _WinAPI_GetModuleHandle(0)
    Global $g_hHookKeyboard = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($g_hLowLevelKeyboardProc), $g_hModuleHandle)

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    While True
    Switch TrayGetMsg()
    Case $g_idExit
    _Exit()
    EndSwitch
    WEnd

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func _LowLevelKeyboardProc($nCode, $wParam, $lParam)
    Local Static $bRun = False
    Local $tKey = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If $nCode < 0 Then Return _WinAPI_CallNextHookEx($g_hHookKeyboard, $nCode, $wParam, $lParam)

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

    If $wParam = $WM_KEYDOWN Then
    If $tKey.vkCode = 0x46 And Not $bRun Then
    $bRun = Not $bRun
    Return
    EndIf
    EndIf

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

    If $wParam = $WM_KEYUP Then
    If $tKey.vkCode = 0x46 Then
    ConsoleWrite($bRun)
    If $bRun Then Return
    EndIf
    EndIf

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

    Return _WinAPI_CallNextHookEx($g_hHookKeyboard, $nCode, $wParam, $lParam)
    EndFunc

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +0

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

    Func _Exit()
    _WinAPI_UnhookWindowsHookEx($g_hHookKeyboard)
    DllCallbackFree($g_hLowLevelKeyboardProc)
    Exit
    EndFunc

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit]

    Hat jemand eine Idee für mich?