表述能力不行,先把代码放上来,有时间在详细说明: Imports System.Runtime.InteropServicesPublic Class MyHookClass MyHook 'Hook键盘 Private Const WH_KEYBOARD As Integer = 2 'Hook返回值 Private hHook As Integer = 0 '定义引用变量防止CallbackOnCollectedDelegate错误的产生 Private HookProc As CallBack '回调函数 Public Delegate Function CallBack()Function CallBack(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer '事件 Public Event KeyDown As System.Windows.Forms.KeyEventHandler Public Event KeyUp As System.Windows.Forms.KeyEventHandler '获取线程ID的API声明 <DllImport("kernel32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _ Public Overloads Shared Function GetCurrentThreadId()Function GetCurrentThreadId() As Integer End Function '设置Hook的API声明 <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _ Public Overloads Shared Function SetWindowsHookEx()Function SetWindowsHookEx( _ ByVal idHook As Integer, ByVal HookProc As CallBack, _ ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer End Function '处理下一Hook的API声明 <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _ Public Overloads Shared Function CallNextHookEx()Function CallNextHookEx( _ ByVal idHook As Integer, ByVal nCode As Integer, _ ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer End Function '移除Hook的API声明 <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _ Public Overloads Shared Function UnhookWindowsHookEx()Function UnhookWindowsHookEx( _ ByVal idHook As Integer) As Boolean End Function '安装Hook,类型键盘线程钩子,失败返回0,成功返回钩子句柄 Public Function SetHook()Function SetHook() As Integer HookProc = New CallBack(AddressOf KeyBoardProc) hHook = SetWindowsHookEx(WH_KEYBOARD, HookProc, IntPtr.Zero, GetCurrentThreadId) Return hHook End Function '钩子处理子程 Private Function KeyBoardProc()Function KeyBoardProc( _ ByVal nCode As Integer, _ ByVal wParam As IntPtr, _ ByVal lParam As IntPtr) As Integer ' If nCode = 0 Then If lParam.ToInt32 > 0 Then '处理键盘KeyDown事件 RaiseEvent KeyDown(Me, New Windows.Forms.KeyEventArgs(CType(wParam, Windows.Forms.Keys))) End If If lParam.ToInt32 < 0 Then '处理键盘KeyUp事件 RaiseEvent KeyUp(Me, New Windows.Forms.KeyEventArgs(CType(wParam, Windows.Forms.Keys))) End If End If Return CallNextHookEx(hHook, nCode, wParam, lParam) End Function '移除Hook,成功返回True,失败返回False Public Function UnHook()Function UnHook() As Boolean Return UnhookWindowsHookEx(hHook) End FunctionEnd Class