示例:完整的键盘钩子public class WindowsHook
{
private int hookcount = 0;
private StandardCheck mCheck = new com.uncnet.GSPMgr.Common.StandardCheck();
public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam); //声明API函数:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid);

[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern bool UnhookWindowsHookEx(IntPtr hhook);

[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam); [DllImport("kernel32.dll", ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern int GetCurrentThreadId(); private IntPtr iHookHandle=IntPtr.Zero;
private GCHandle _hookProcHandle;
//这个是表明Hook的种类是键盘Hook
private const int WH_KEYBOARD = 2;
//控制键
private const int VK_CONTROL =0x7b; public WindowsHook( )

//
// TODO: 在此处添加构造函数逻辑
//
} //解键盘HOOK函数
public void UnHookKBD()
{
try
{
if (iHookHandle!=IntPtr.Zero)
UnhookWindowsHookEx(iHookHandle);
_hookProcHandle.Free();
iHookHandle = IntPtr.Zero;
}
catch
{
return;
}
}
//设置键盘HOOK
public void EnableKBDHook()
{
HookProc hookProc = new HookProc(MyKBHFunc);
_hookProcHandle = GCHandle.Alloc(hookProc);
iHookHandle = SetWindowsHookEx(WH_KEYBOARD, hookProc, IntPtr.Zero, GetCurrentThreadId());
if (iHookHandle == IntPtr.Zero) throw new System.Exception("没有足够权限安装钩子!");
}       public IntPtr MyKBHFunc(int iCode , IntPtr wParam,IntPtr lParam)
   {  
   if( hookcount > 0 )
   {
   if( hookcount == 2 )
   hookcount = 0;
   else
   hookcount++;
   return (IntPtr)0;
   }    if ((int)wParam ==VK_CONTROL )
   {
   hookcount ++;
   UnHookKBD();    mCheck.SingleCheck( MainFormXP.ActiveForm );
   mCheck.Lose();    EnableKBDHook();
   return CallNextHookEx(iHookHandle, iCode, wParam, lParam);
   }
   return (IntPtr)0;
   }