private void StartMouseHook()

{

  Win32Api.HookProc mouseHookProcedure = new Win32Api.HookProc(MouseHookProc);
       m_hMouseHook = Win32Api.SetWindowsHookEx(WH_MOUSE_LL,
       mouseHookProcedure, 
       Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),
                    0);

}

这样会造成回调函数给收回。出现CallbackOnCollectedDelegate异常。

解决方法:

private static Win32Api.HookProc mouseHookProcedure;

private void StartMouseHook()
    {
      mouseHookProcedure = new Win32Api.HookProc(MouseHookProc);
       m_hMouseHook = Win32Api.SetWindowsHookEx(WH_MOUSE_LL,
       mouseHookProcedure, 
       Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),
                    0);

}

这样回调函数就不会给收回了