要实现系统钩子其实很简单,调用三个Win32的API即可。
SetWindowsHookEx 用于设置钩子。(设立一道卡子,盘查需要的信息)
C# 钩子原理        [DllImport( "user32.dll", CallingConvention = CallingConvention.StdCall )]
C# 钩子原理        
public static extern IntPtr SetWindowsHookEx ( WH_Codes idHook, HookProc lpfn,
C# 钩子原理            IntPtr pInstance, 
int threadId );
C# 钩子原理

CallNextHookEx 用于传递钩子(消息是重要的,所以从哪里来,就应该回到哪里去,除非你决定要封锁消息)

C# 钩子原理        [DllImport( "user32.dll", CallingConvention = CallingConvention.StdCall )]
C# 钩子原理        
public static extern int CallNextHookEx ( IntPtr pHookHandle, int nCode,
C# 钩子原理            Int32 wParam, IntPtr lParam );
C# 钩子原理

UnhookWindowsHookEx 卸载钩子(卸载很重要,卡子设多了会造成拥堵)

C# 钩子原理        [DllImport( "user32.dll", CallingConvention = CallingConvention.StdCall )]
C# 钩子原理        
public static extern bool UnhookWindowsHookEx ( IntPtr pHookHandle );

更加详细的请看如下微软中国官方网站关于的HOOK的专题

HOOK专题

相关文章: