Public Function MyKBHook(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If nCode >= 0 Then
        Open "C:\Keyfile.txt" For Append As #1 '将键盘的操作记录在Keyfile.txt文件之中
            '记录所操作的键、操作时间、日期操作时的按键状态,用16进制记录
            Write #1, wParam, Hex(lParam), Date, Time
        Close #1
        MyKBHook = 0 '表示要处理这个消息
        '屏蔽ALT+F4组合键
        If wParam = 115 And (lParam And H20000000) <> 0 Then
            If (lParam And &HC000000) = 0 Then '是否进行ALT+F4操作
                MyHBHook = 1 '钩子吃掉这个消息
            End If
        End If
    End If
    Call CallNextHookEx(hHook, nCode, wParam, lParam) '将消息传给下一个钩子
End Function'*************************************************************上面是从网上获得的VB线程钩子(LocalHook)的例子,上面的例子是把捕获的消息吃掉,网上找了很多关于钩子的例子和资料几乎都是关于如何吃掉被捕获的消息的。但是我现在的想法是把捕获的消息吃掉的同时转换成另一个消息发回去,例如,捕获的消息是 Enter ,我将它转换成 VbKeyF4 ,不用sendkeys的话,就是转换消息,有没有可能实现,如果可以实现的话,该怎么做呢?

解决方案 »

  1.   

    主要改Call CallNextHookEx(hHook, nCode, wParam, lParam)就行了.
    Public Function MyKBHook(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If nCode >= 0 Then
            Open "C:\Keyfile.txt" For Append As #1 '将键盘的操作记录在Keyfile.txt文件之中
                '记录所操作的键、操作时间、日期操作时的按键状态,用16进制记录
                Write #1, wParam, Hex(lParam), Date, Time
            Close #1
            MyKBHook = 0 '表示要处理这个消息
            '屏蔽ALT+F4组合键
            If wParam = 115 And (lParam And H20000000) <> 0 Then
                If (lParam And &HC000000) = 0 Then '是否进行ALT+F4操作
                    MyHBHook = 1 '钩子吃掉这个消息
                    Call CallNextHookEx(hHook, nCode, "你的消息",  "你的消息")
                    exit function
                End If
            End If
        End If
        Call CallNextHookEx(hHook, nCode, wParam, lParam) '将消息传给下一个钩子
    End Function
      

  2.   

    MyKBHook = CallNextHookEx(hHook, nCode, wParam, lParam) '将消息传给下一个钩子