这里有一段有关钩子的代码,看不太明白,希望大侠指点一二。代码说明如下:
---------------------------------------------------------------------------------
窗体A   初始化时调用  Hook 过程
模块BPublic Sub Hook(ByVal hWnd As Long)
  lpPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WndProc)
End SubPublic Sub UnHook(ByVal hWnd As Long)
  SetWindowLong hWnd, GWL_WNDPROC, lpPrevWndProc
End SubFunction WndProc(..... 一堆参数) As Long
    
  If HIWORD(wParam) = 消息A Then
     ...
  else if ...
    ...
  End If
  WndProc = CallWindowProc(lpPrevWndProc, hWnd, Message, wParam, lParam)
  
End Function
---------------------------------------------------------------------------------
问题:注册钩子和注销钩子以及钩子的处理函数Wndproc不太明白,那位能给具体解释解释每行代码的作用吗?先谢了!

解决方案 »

  1.   

    VB 的呀GOOGLE之 一句话讲不清楚的。
    windows 有一个消息链, 你注册你的钩子 那么你就第一个接触到这些消息然后钩子的处理函数 WndProc是一个回调函数 就是处理你感兴趣的咚咚注销钩子 就把你的钩子从系统链卸载。。
      

  2.   

    你这个不是钩子,是超类。
    Public Sub Hook(ByVal hWnd As Long) 
      lpPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WndProc) //指定wndpro 为消息处理函数
    End SubPublic Sub UnHook(ByVal hWnd As Long)
      SetWindowLong hWnd, GWL_WNDPROC, lpPrevWndProc //还原默认处理函数
    End SubFunction WndProc(..... 一堆参数) As Long
        
      If HIWORD(wParam) = 消息A Then
         ...
      else if ...
        ...
      End If
      WndProc = CallWindowProc(lpPrevWndProc, hWnd, Message, wParam, lParam) //向下传递消息
      
    End Function
      

  3.   

    To kongguangming(Fly) 能解释一下超类是什么概念么? 你的代码注释不太清楚能详细些么?
      

  4.   

    To beyondtkl(大龙驹<*BEYOND U*>)  我也知道有关钩子的一些概念,但写代码时老出错,能用Delphi写一个例子么?
      

  5.   

    这不是钩子,只是窗体子类化!建议楼主看看Delphi开发人员指南
    SetWindowLong的GWL_WNDPROC(常量~子类化窗口过程,其它常量参考MSDN);
    WndProc是回调函数,这里替换原窗口过程。钩子按调用范围分全局,局部钩子;用途分有键盘、鼠标等等
    具体查看SetWindowsHookEx的帮助文档!
    写全局钩子必须注意:钩子句柄和一些要用的全局变量应该用共享内存块存储起来,或者也可以使用消息(不过比较麻烦)
      

  6.   

    怎么看怎么不像是 Hook 啊~~
    都没有出现 SetWindowsHookEx