API函数中SetWindowLong建立与Winproc的挂钩

解决方案 »

  1.   

    方法一
    Public Const GWL_WNDPROC = (-4)
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long方法二
    Public Const WH_CALLWNDPROC = 4
    Public Const WH_KEYBOARD = 2
    Public Const WH_MOUSE = 7
    Public 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
      

  2.   

    '启动挂钩
    '设置新的窗口函数和备份老的窗口函数
    wlOldProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf OwnWinProc)'卸载程序时:
    SetWindowLong hWnd, GWL_WNDPROC, wlOldProc'在标准模块Module里添加窗口函数:
    Public Function OwnWinProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long   Select Case wMsg
         Case 
         ........
         '检测Windows事件
      
       End Select
       OwnWinProc = CallWindowProc(wlOldProc, hWnd, wMsg, wParam, lParam)
    End Function