VB中hook函数的几个参数填什么

ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long
给个实例

哦,你指的应该是 CallNextHookEx 函数吧。
参考 SetWindowsHookEx 的代码。

'In a module
Public Const WH_KEYBOARD = 2
Public Const VK_SHIFT = &H10
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
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
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public hHook As Long
Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'if idHook is less than zero, no further processing is required
If idHook < 0 Then
'call the next hook
KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
Else
'check if SHIFT-S is pressed
If (GetKeyState(VK_SHIFT) And &HF0000000) And wParam = Asc("S") Then
'show the result
Form1.Print "Shift-S pressed ..."
End If
'call the next hook
KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
End If
End Function
'In a form, called Form1
Private Sub Form_Load()
'set a keyboard hook
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, App.ThreadID)
End Sub
Private Sub Form_Unload(Cancel As Integer)
'remove the windows-hook
UnhookWindowsHookEx hHook
End Sub

从这段代码可以看出,CallNextHookEx 的作用是调用下一个 Windows 钩子,防止本来应该传递的消息没有继续传递而导致崩溃。
所以 CallNextHookEx 的 hHook 填在 SetWindowsHookEx 中申请的钩子句柄;nCode 填 SetWindowsHookEx 的 idHook 参数。
idHook: 钩子参数,可选值为: WH_KEYBOARD/WH_MOUSE/WH_JOURNALRECORD/WH_CALLWNDPROC
而 wParam 和 lParam 则要靠他们传入的参数。

具体还要从 SetWindowsHookEx 说起。
SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallKeyHookProc, App.hInstance, 0)

然后 CallKeyHookProc 的声明如下:
Public Function CallKeyHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
在 CallKeyHookProc 的最后调用了 CallNextHookEx(这里的 code 就是 idHook):
CallKeyHookProc = CallNextHookEx(code, wParam, lParam)

所以,是 SetWindowsHookEx 将 wParam 和 lParam 传入 CallKeyHookProc,然后后者再用这两个参数调用 CallNextHookEx。

关于 wParam 和 lParam 的作用,作用是很多的。比如,在截取键盘消息的时候,wParam = 按下的键的 ASCII 码,lParam = 键状态(见 GetAsyncKeyState 的说明)。

参考资料:超级API函数浏览器

温馨提示:答案为网友推荐,仅供参考