Vba 如果没有';t用户表单?

Vba 如果没有';t用户表单?,vba,excel,winapi,hook,Vba,Excel,Winapi,Hook,我将简单的鼠标挂钩设置为: Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As LongPtr) As LongPtr Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As LongPtr, ByVal lpFn As LongP

我将简单的鼠标挂钩设置为:

Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As LongPtr) As LongPtr
Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As LongPtr, ByVal lpFn As LongPtr, ByVal hmod As LongPtr, ByVal dwThreadId As LongPtr) As LongPtr
Private Declare PtrSafe Function CallNextHookEx Lib "user32" (ByVal hHook As LongPtr, ByVal nCode As LongPtr, ByVal wParam As LongPtr, lParam As Any) As LongPtr
Private Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As LongPtr

Private HookHandle As LongPtr

Private Const WH_MOUSE = 7

Public Sub RemoveHook()
    On Error Resume Next
    UnhookWindowsHookEx HookHandle
End Sub

Public Sub SetHook()
    HookHandle = SetWindowsHookEx(WH_MOUSE, AddressOf NewProc, 0, GetCurrentThreadId)
End Sub

Public Function NewProc(ByVal lngCode As LongPtr, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr
    NewProc = CallNextHookEx(HookHandle, lngCode, wParam, lParam)
    Exit Function
End Function
Excel的速度太慢了,我几乎无法杀死它。 但当我在userform中这样做时:

Private Sub UserForm_Initialize()
    SetHook
End Sub

Private Sub UserForm_Terminate()
    RemoveHook
End Sub

它工作正常。我的问题是为什么?

可能与Excel的消息处理有关。Excel不适合编写这样的代码。看起来像是X-Y问题。你需要鼠标钩子干什么?大卫:所以我不能钩住任何进程?马修:我只是想更好地理解它。