为什么我调用时HookStart()总是返回0,请高手指教using   System;   
  using   System.Runtime.InteropServices;   
  using   System.IO;   
  using   System.Reflection;   
  using   System.Windows.Forms;   
  namespace   HookTest   
  {   
  ///   <summary>   
  ///   Hook   的摘要说明。   
  ///   </summary>   
  public   class   Hook   
  {   
  public   Hook()   
  {   
  //   
  //   TODO:   在此处添加构造函数逻辑   
  //   
  }   
  //   安装钩子   
    
    
  public   const   int   WH_KEYBOARD   =   13;   
  public   const   int   WH_MOUSE_LL   =   14;   
    
  [DllImport("user32.dll",CharSet=CharSet.Auto,   CallingConvention=CallingConvention.StdCall)]   
    
  public   static   extern   int   SetWindowsHookEx(int   idHook,   HookProc   lpfn,   IntPtr   hInstance,   int   threadId);   
    
  //   卸载钩子   
    
  [DllImport("user32.dll",CharSet=CharSet.Auto,   CallingConvention=CallingConvention.StdCall)]   
    
  public   static   extern   bool   UnhookWindowsHookEx(int   idHook);   
    
  //   继续下一个钩子   
    
  [DllImport("user32.dll",CharSet=CharSet.Auto,   CallingConvention=CallingConvention.StdCall)]   
    
  public   static   extern   int   CallNextHookEx(int   idHook,   int   nCode,   Int32   wParam,   IntPtr   lParam);       
    
  //   取得当前线程编号   
    
  [DllImport("kernel32.dll")]   
  static   extern   int   GetCurrentThreadId();     
    
  //定义委托   
  public   delegate   int   HookProc(int   nCode,   Int32   wParam,   IntPtr   lParam);   
    static   int   hKeyboardHook   =   0;     
  HookProc   KeyboardHookProcedure;   
    
  //处理   
  private   int   KeyboardHookProc(int   nCode,   Int32   wParam,   IntPtr   lParam)   
    
  {   
    
  KeyMSG   m   =   (KeyMSG)   Marshal.PtrToStructure(lParam,   typeof(KeyMSG));   
  if   ((int)   m.vkCode   ==   91)   
    
  {   
    
  //textbox1.Text   =   “A”   
  //MessageBox.Show(wParam.ToString(),"dd");   
  return   1;   
    
  }   
    
  return   CallNextHookEx(hKeyboardHook,   nCode,   wParam,   lParam);     
  }   
  //   安装钩子   
  public   void   HookStart()   
    
  {   
    
  if(hKeyboardHook   ==   0)   
    
  {   
    
  //   创建HookProc实例   
    
  KeyboardHookProcedure   =   new   HookProc(KeyboardHookProc);   
    
  //   设置线程钩子   
    
  //hKeyboardHook   =   SetWindowsHookEx(WH_KEYBOARD,   KeyboardHookProcedure,   IntPtr.Zero,     
    
  // GetCurrentThreadId());   
  hKeyboardHook   =   SetWindowsHookEx(   WH_KEYBOARD,KeyboardHookProcedure,     
    
    Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);   
    
  //   如果设置钩子失败   
    
  if(hKeyboardHook   ==   0   )           
    
  {   
    
  HookStop();   
    
  throw   new   Exception("SetWindowsHookEx   failedeeeeeeee.");   
    
  }   
    
  }   
    
  }   
    
  //   卸载钩子   
    
  public   void   HookStop()   
    
  {   
    
  bool   retKeyboard   =   true;   
    
  if(hKeyboardHook   !=   0)   
    
  {   
    
  retKeyboard   =   UnhookWindowsHookEx(hKeyboardHook);   
    
  hKeyboardHook   =   0;   
    
  }     
    
  if   (!(retKeyboard))     
  {   
  throw   new   Exception("UnhookWindowsHookEx     failedsssss.");   
    
  }   
  }   
  public   struct   KeyMSG   
    
  {   
    
  public   int   vkCode;       
    
  public   int   scanCode;     
    
  public   int   flags;       
    
  public   int   time;     
    
  public   int   dwExtraInfo;     
    
  }   
    
    
  }   
  }