wilwu 2020-01-19 13:16
浏览 213

在VBA中同时启用了两个钩子,但只能释放一个怎么回事?

我想通过HOOK同时监控鼠标和键盘的操作,获得鼠标的当前坐标和我按下的按键码。
鼠标这个hook没有问题,但是当我加上键盘hook时候,发现释放不了键盘的hook.
点击结束后,鼠标hook停止了但是键盘还在继续运行。请各位帮帮我。
代码如下:

Sub UNHOOK() '卸钩子
    UnhookWindowsHookEx Mhook2
    UnhookWindowsHookEx Mhook
    Mhook2 = 0
    Mhook = 0

End Sub
Sub MOUSEHOOK()
    Mhook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MyMhook, Application.Hinstance, 0)
    Mhook2 = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf MyMhookkey, Application.Hinstance, 0)
    If Mhook = 0 Then MsgBox "钩子注册失败"
    If Mhook2 = 0 Then MsgBox "钩子注册失败"
End Sub
Public Function MyMhook(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If ncode = 0 Then
        If wParam = WM_MOUSEMOVE Then
            Dim p As POINTAPI
            GetCursorPos p
            GetmousePos.TextBox1.Value = p.X & "," & p.Y
        End If
    Else
        MyMhook = CallNextHookEx(Mhook, ncode, wParam, lParam)
    End If
    MyMhook = CallNextHookEx(Mhook, ncode, wParam, lParam)
End Function
Public Function MyMhookkey(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If ncode = 0 Then
        If wParam = WM_KEYDOWN Then
            CopyMemory mymsg, ByVal lParam, LenB(mymsg)
            a = Chr(mymsg.vKey)
            MsgBox mymsg.vKey
        End If
    Else
        MyMhookkey = CallNextHookEx(Mhook2, ncode, wParam, lParam)
    End If
    MyMhookkey = CallNextHookEx(Mhook2, ncode, wParam, lParam)
End Function
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器