C#.Net的全局键盘钩子(Hook)技术_icousing System;

C#.Net的全局键盘钩子(Hook)技术_icousing System.Windows.Forms;

C#.Net的全局键盘钩子(Hook)技术_icousing System.Runtime.InteropServices;

C#.Net的全局键盘钩子(Hook)技术_icousing System.Reflection;

C#.Net的全局键盘钩子(Hook)技术_iconamespace HookDll

C#.Net的全局键盘钩子(Hook)技术_ico_06C#.Net的全局键盘钩子(Hook)技术_ico_07C#.Net的全局键盘钩子(Hook)技术_ico_08{

C#.Net的全局键盘钩子(Hook)技术_ico_09 public class HookDll

C#.Net的全局键盘钩子(Hook)技术_ico_10C#.Net的全局键盘钩子(Hook)技术_ico_11 C#.Net的全局键盘钩子(Hook)技术_ico_08{

C#.Net的全局键盘钩子(Hook)技术_ico_09  private KBDLLHOOKSTRUCT kbdllhs; 

C#.Net的全局键盘钩子(Hook)技术_ico_09  private IntPtr iHookHandle  =IntPtr.Zero;

C#.Net的全局键盘钩子(Hook)技术_ico_09  private GCHandle _hookProcHandle;

C#.Net的全局键盘钩子(Hook)技术_ico_09  public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);

C#.Net的全局键盘钩子(Hook)技术_ico_09  [DllImport("user32.dll", CharSet=CharSet.Auto)]

C#.Net的全局键盘钩子(Hook)技术_ico_09  public static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid);

C#.Net的全局键盘钩子(Hook)技术_ico_09  

C#.Net的全局键盘钩子(Hook)技术_ico_09  [DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]

C#.Net的全局键盘钩子(Hook)技术_ico_09  public static extern bool UnhookWindowsHookEx(IntPtr hhook);

C#.Net的全局键盘钩子(Hook)技术_ico_09 

C#.Net的全局键盘钩子(Hook)技术_ico_09  [DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]

C#.Net的全局键盘钩子(Hook)技术_ico_09  public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam);

C#.Net的全局键盘钩子(Hook)技术_ico_09  [DllImport("kernel32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]

C#.Net的全局键盘钩子(Hook)技术_ico_09  private static extern IntPtr GetModuleHandle(string lpModuleName);

C#.Net的全局键盘钩子(Hook)技术_ico_09  [DllImport("Kernel32.dll",EntryPoint="RtlMoveMemory")] 

C#.Net的全局键盘钩子(Hook)技术_ico_09  public static extern void CopyMemory (ref KBDLLHOOKSTRUCT Source,IntPtr Destination,int Length);

C#.Net的全局键盘钩子(Hook)技术_ico_09

C#.Net的全局键盘钩子(Hook)技术_ico_09  private const int WH_KEYBOARD = 13;

C#.Net的全局键盘钩子(Hook)技术_ico_09  

C#.Net的全局键盘钩子(Hook)技术_ico_09  public void DisableKBDHook()

C#.Net的全局键盘钩子(Hook)技术_ico_10C#.Net的全局键盘钩子(Hook)技术_ico_11  C#.Net的全局键盘钩子(Hook)技术_ico_08{

C#.Net的全局键盘钩子(Hook)技术_ico_09   try

C#.Net的全局键盘钩子(Hook)技术_ico_10C#.Net的全局键盘钩子(Hook)技术_ico_11   C#.Net的全局键盘钩子(Hook)技术_ico_08{

C#.Net的全局键盘钩子(Hook)技术_ico_09    if (iHookHandle!=IntPtr.Zero)

C#.Net的全局键盘钩子(Hook)技术_ico_10C#.Net的全局键盘钩子(Hook)技术_ico_11    C#.Net的全局键盘钩子(Hook)技术_ico_08{

C#.Net的全局键盘钩子(Hook)技术_ico_09     UnhookWindowsHookEx(iHookHandle);

C#.Net的全局键盘钩子(Hook)技术_ico_45    }

C#.Net的全局键盘钩子(Hook)技术_ico_09    _hookProcHandle.Free();

C#.Net的全局键盘钩子(Hook)技术_ico_09    iHookHandle = IntPtr.Zero;

C#.Net的全局键盘钩子(Hook)技术_ico_45   }

C#.Net的全局键盘钩子(Hook)技术_ico_09   catch

C#.Net的全局键盘钩子(Hook)技术_ico_10C#.Net的全局键盘钩子(Hook)技术_ico_11   C#.Net的全局键盘钩子(Hook)技术_ico_08{

C#.Net的全局键盘钩子(Hook)技术_ico_09    return;

C#.Net的全局键盘钩子(Hook)技术_ico_45   }

C#.Net的全局键盘钩子(Hook)技术_ico_45  }

C#.Net的全局键盘钩子(Hook)技术_ico_09  public void EnableKBDHook()

C#.Net的全局键盘钩子(Hook)技术_ico_10C#.Net的全局键盘钩子(Hook)技术_ico_11  C#.Net的全局键盘钩子(Hook)技术_ico_08

C#.Net的全局键盘钩子(Hook)技术_ico_09   HookProc hookProc = new HookProc(KBDDelegate);

C#.Net的全局键盘钩子(Hook)技术_ico_09   _hookProcHandle  = GCHandle.Alloc(hookProc);

C#.Net的全局键盘钩子(Hook)技术_ico_09   iHookHandle   = SetWindowsHookEx(WH_KEYBOARD, hookProc, GetModuleHandle("HookDll.dll"), 0);

C#.Net的全局键盘钩子(Hook)技术_ico_09   if (iHookHandle == IntPtr.Zero) 

C#.Net的全局键盘钩子(Hook)技术_ico_10C#.Net的全局键盘钩子(Hook)技术_ico_11   C#.Net的全局键盘钩子(Hook)技术_ico_08{

C#.Net的全局键盘钩子(Hook)技术_ico_09    throw new System.Exception("错误,钩子失败!");

C#.Net的全局键盘钩子(Hook)技术_ico_45   }

C#.Net的全局键盘钩子(Hook)技术_ico_45  }

C#.Net的全局键盘钩子(Hook)技术_ico_09  public IntPtr KBDDelegate(int iCode , IntPtr wParam,IntPtr lParam)

C#.Net的全局键盘钩子(Hook)技术_ico_10C#.Net的全局键盘钩子(Hook)技术_ico_11  C#.Net的全局键盘钩子(Hook)技术_ico_08{

C#.Net的全局键盘钩子(Hook)技术_ico_09   kbdllhs    = new KBDLLHOOKSTRUCT();

C#.Net的全局键盘钩子(Hook)技术_ico_09   CopyMemory(ref kbdllhs, lParam, 20);

C#.Net的全局键盘钩子(Hook)技术_ico_09   

C#.Net的全局键盘钩子(Hook)技术_ico_09   //结果就在这里了^_^

C#.Net的全局键盘钩子(Hook)技术_ico_09   int iHookCode = kbdllhs.vkCode;

C#.Net的全局键盘钩子(Hook)技术_ico_09   DisableKBDHook();

C#.Net的全局键盘钩子(Hook)技术_ico_09   EnableKBDHook();

C#.Net的全局键盘钩子(Hook)技术_ico_09   return CallNextHookEx(iHookHandle, iCode, wParam,lParam);

C#.Net的全局键盘钩子(Hook)技术_ico_45  }

C#.Net的全局键盘钩子(Hook)技术_ico_45 }

C#.Net的全局键盘钩子(Hook)技术_ico_09 [StructLayout(LayoutKind.Sequential)]

C#.Net的全局键盘钩子(Hook)技术_ico_09 public struct KBDLLHOOKSTRUCT

C#.Net的全局键盘钩子(Hook)技术_ico_10C#.Net的全局键盘钩子(Hook)技术_ico_11 C#.Net的全局键盘钩子(Hook)技术_ico_08{

C#.Net的全局键盘钩子(Hook)技术_ico_09  public int vkCode;

C#.Net的全局键盘钩子(Hook)技术_ico_09  public int scanCode;

C#.Net的全局键盘钩子(Hook)技术_ico_09  public int flags;

C#.Net的全局键盘钩子(Hook)技术_ico_09  public int time;

C#.Net的全局键盘钩子(Hook)技术_ico_09  public int dwExtraInfo;

C#.Net的全局键盘钩子(Hook)技术_ico_45 }

C#.Net的全局键盘钩子(Hook)技术_ico_95}