我需要捕获窗体中的鼠标消息,也就是无论在窗体中单击某个控件,都能得到其鼠标的消息,无论是有hwnd或是没有hwnd

解决方案 »

  1.   

    SetWindowsHookEx定义如下: 
        Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long 
        idHook是钩子类型,如WH_KEYBOARD捕捉键盘消息,而WH_MOUSE捕捉鼠标消息。hmod用于全局钩子,VB要实现钩子,必须设为0。dwThreadId用于线程钩子VB中可以设置为App.ThreadID。lpfn为钩子函数,在VB中可以使用AddressOf获得钩子函数的地址。这个函数因为钩子类型不同而有所不同。
      

  2.   

    ' 模块中
    Dim preWndProc As Long
    Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Debug.Print Msg
        
        Select Case Msg
        End Select
        WndProc = CallWindowProc(preWndProc, hwnd, Msg, wParam, lParam)
    End FunctionSub UnHook(lHwnd As Long)
        SetWindowLong lHwnd, GWL_WNDPROC, preWndProcEnd SubSub Hook(lHwnd As Long)
        preWndProc = SetWindowLong(lHwnd, GWL_WNDPROC, AddressOf WndProc)End Sub