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
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WH_KEYBOARD = 2
Public Const WH_KEYBOARD_LL = 13
Public Const WH_SHELL = 10
Public Const WH_GETMESSAGE = 3
Public Const WH_CALLWNDPROC = 4
Public Const PM_KEY_SPACE = &H20  '空格键Public hHook As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Type tagKBDLLHOOKSTRUCT
    vkCode       As Integer 
    scanCode     As Integer  
    flags        As Long   
    Time         As Long  
    dwExtraInfo  As Long
End Type
Public Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As LongSub EnableHook() '定义EnableHook
'设置拦截
    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf Myfunc, App.hInstance, 0)
End Sub
Sub DisableHook() '定义DisableHook
    Dim ret As Long
    ret = UnhookWindowsHookEx(hHook) '取消拦截
End Sub
Function Myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 'wParam代表按键
    '
Dim kk As tagKBDLLHOOKSTRUCT
Dim kb As Long, pks As Byte
    'Debug.Print wParam
    CopyMemory kk, lParam, Len(kk)
    Form1.Text1 = wParam
    Form1.Label1 = kk.vkCode & ":" & kk.scanCode & ":" & kk.Time
    'If wParam = 256 Then
    Myfunc = 1: Exit Function
    'endif
    Myfunc = CallNextHookEx(hHook, ncode, wParam, lParam) '传到下一个拦截
End Function是一个全局键盘钩子,可是我得到的wParam怎么始终是 按下是256  弹出键则是257  无论按哪个都是这两个值在变.我把    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf Myfunc, App.hInstance, 0) 中的WH_KEYBOARD_LL改成WH_KEYBOARD就可以得到对应按键的ASCII码,但是不能捕捉到全局的键盘消息了,也就是如焦点在记事本中按键的时候不能捕捉到.