vb 请大神解释下勾子的用法以及各Id勾子,真心不懂

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

这几种勾子怎么用,最好有完整的代码演示,
Public Const WH_CALLWNDPROC = 4
Public Const WH_CALLWNDPROCRET = 12
Public Const WH_CBT = 5
Public Const WH_DEBUG = 9
Public Const WH_FOREGROUNDIDLE = 11
Public Const WH_GETMESSAGE = 3
Public Const WH_HARDWARE = 8
Public Const WH_JOURNALPLAYBACK = 1
Public Const WH_JOURNALRECORD = 0
Public Const WH_KEYBOARD = 2
Public Const WH_MOUSE = 7
Public Const WH_MSGFILTER = (-1)
Public Const WH_SHELL = 10
Public Const WH_SYSMSGFILTER = 6

具体怎么用,去看msdn或者google
这里简单说下:
Public Const WH_CALLWNDPROC = 4 回调
Public Const WH_CALLWNDPROCRET = 12 带返回的回调
Public Const WH_CBT = 5 CBT钩子
Public Const WH_DEBUG = 9 调试
Public Const WH_FOREGROUNDIDLE = 11 后台空闲
Public Const WH_GETMESSAGE = 3 获取消息
Public Const WH_HARDWARE = 8 硬件
Public Const WH_JOURNALPLAYBACK = 1 日志回放
Public Const WH_JOURNALRECORD = 0 日志
Public Const WH_KEYBOARD = 2 键盘
Public Const WH_MOUSE = 7 鼠标
Public Const WH_MSGFILTER = (-1) 消息过滤器
Public Const WH_SHELL = 10 外壳
Public Const WH_SYSMSGFILTER = 6 系统消息过滤器
一般来说,鼠标、键盘、日志钩子用的多,别的用的很少。一些钩子需要放在dll里进程注入,vb基本上因为写不了dll用不起来

http://blog.sina.com.cn/s/blog_56e350c10102vs16.html