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条回答

    报告相同问题?

    悬赏问题

    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog
    • ¥15 Excel发现不可读取的内容