Public Function KeyHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long    
    If code <> 0 Then
        KeyHookProc = CallNextHookEx(kHook, code, wParam, lParam)
        Exit Function
    End If    KeyHookProc = 0
    KeyHookProc = CallNextHookEx(kHook, code, wParam, lParam)End Function请问:
1:这段代码应该是处理了keydown和keyup事件,如果只处理一个时间呢?
2:我想改变键值,例如当按下1时我将键值改为2返回窗体,如何实现?

解决方案 »

  1.   

    keydown和keyup的Code值不一样,做一下筛选就行了。对应的Code自己设个断点获取一下吧
      

  2.   

    WH_KEYBOARD时wParam是键值,和时间应该没关系
      

  3.   

    WH_KEYBOARD时wParam是键值,和事件应该没关系
      

  4.   

    Public Function MyKBHook(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If ncode >= 0 Then
          if wParam =KeyDown事件的健值 then
            MyKBHook = 0 '表示要处理这个消息
          end if
        End If
        Call CallNextHookEx(hHook, ncode, wParam, lParam) '将消息传给下一个钩子
    End Function
    自己看看
      

  5.   

    Public Function KeyHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long    ' 当当前键是被按下的时候,那么lparam的最高位为0,否则为1
        ' 两次事件也就是一次keydown,另一次是keyup
        If code <> 0 And lParam >= 0 Then
            KeyHookProc = CallNextHookEx(kHook, code, wParam, lParam)
            Exit Function
        End If
        wParam = vbKeyA         ' 改变键值
        KeyHookProc = 0
        wParam = vbkey
        KeyHookProc = CallNextHookEx(kHook, code, wParam, lParam)End Function
      

  6.   

    呵呵,自己找到答案了
    If (lParam And &H80000000) = &H80000000 Then
        KeyUp事件
    Else
        KeyDwon事件
    End If