如题

解决方案 »

  1.   

    '以下在.Bas
    Option ExplicitDeclare 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 LongPublic hnexthookproc As Long
    Public Const HC_ACTION = 0
    Public Const WH_KEYBOARD = 2Public Sub UnHookKBD()
    If hnexthookproc <> 0 Then
       UnhookWindowsHookEx hnexthookproc
       hnexthookproc = 0
    End If
    End Sub
    Public Function EnableKBDHook()
    If hnexthookproc <> 0 Then
       Exit Function
    End If
    hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _
                MyKBHFunc, App.hInstance, 0)
    If hnexthookproc <> 0 Then
       EnableKBDHook = hnexthookproc
    End If
    End Function
    Public Function MyKBHFunc(ByVal iCode As Long, _
        ByVal wParam As Long, ByVal lParam As Long) As Long
      '这三个叁数是固定的,不能动,而MyKBHFunc这个名称只要和
      'SetWindowsHookex()中 AddressOf後的名称一样便可,不一定叫什麽
      'wParam 是传入按了哪个key的virtual-key code  '如果您将以下的两行un则所有键盘的输入皆没有作用
      'MyKBHFunc = 1  '吃掉讯息
      'Exit Function  MyKBHFunc = 0 '讯息要处理
      If iCode < 0 Then
        MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
        Exit Function
      End If
      If wParam = vbKeySnapshot Then  '侦测 有没有按到PrintScreen键
        MyKBHFunc = 1 '在这个Hook便吃掉这个讯息
        Debug.Print "haha"
      Else
        Call CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
      End If
    End Function'以下在Form
    Private Sub Form_Load()
    Call EnableKBDHook
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    Call UnHookKBD
    End Sub
      

  2.   

    //什么是全局钩子
    全局钩子也就是Remote Hook,和它相对应的是LocalHook,LocalHook的拦截范围只有Process本身(也就是只对自己的程序有效),Remote Hook的拦截范围是整个系统,即其他Process的动作您也可以拦截,需要注意的是Remote Hook的Hook Function要在.Dll之中,而vb不能输出标准的dll,所以,想实现全局钩子一般都用c写个dll,供vb调用
      

  3.   

    http://community.csdn.net/Expert/TopicView.asp?id=3310057