namespace ClassLibrary.Hardware 
 { 
 // 原创 Using C# and Win32API ( 最近我把所有的Win32API看了1遍 很是过瘾 ) public class Mouse 
 { 
  internal const byte SM_MOUSEPRESENT = 19; 
  internal const byte SM_CMOUSEBUTTONS = 43; 
  internal const byte SM_MOUSEWHEELPRESENT = 75;  internal struct POINTAPI 
  { 
   internal int x; 
   internal int y; 
  }  internal struct RECT 
  { 
   internal int left ; 
   internal int top ; 
   internal int right ; 
   internal int bottom ; 
  }  [System.Runtime.InteropServices.DllImport("user32.dll" , EntryPoint="SwapMouseButton")] 
  internal extern static int SwapMouseButton ( int bSwap );  [System.Runtime.InteropServices.DllImport("user32" , EntryPoint="ClipCursor")] 
  internal extern static int ClipCursor(ref RECT lpRect);  [System.Runtime.InteropServices.DllImport( "user32.dll" , EntryPoint="GetCursorPos" )] 
  internal extern static int GetCursorPos( ref POINTAPI lpPoint );  [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint="ShowCursor")] 
  internal extern static bool ShowCursor ( bool bShow ) ;  [System.Runtime.InteropServices.DllImport( "user32.dll" , EntryPoint = "EnableWindow" )] 
  internal extern static int EnableWindow( int hwnd , int fEnable );  [System.Runtime.InteropServices.DllImport("user32.dll" , EntryPoint="GetWindowRect")]  
  internal extern static int GetWindowRect( int hwnd , ref RECT lpRect ) ;  [System.Runtime.InteropServices.DllImport("user32.dll" , EntryPoint="SetCursorPos")]  
  internal extern static int SetCursorPos ( int x , int y ) ;  [System.Runtime.InteropServices.DllImport("user32.dll" , EntryPoint="GetSystemMetrics")] 
  internal extern static int GetSystemMetrics( int nIndex );  [System.Runtime.InteropServices.DllImport("user32.dll" , EntryPoint="SetDoubleClickTime")] 
  internal extern static int SetDoubleClickTime ( int wCount );  [System.Runtime.InteropServices.DllImport("user32.dll" , EntryPoint="GetDoubleClickTime")] 
  internal extern static int GetDoubleClickTime() ;  [System.Runtime.InteropServices.DllImport("kernel32.DLL", EntryPoint="Sleep")] 
  internal extern static void Sleep ( int dwMilliseconds ) ;  //得到鼠标相对与全屏的坐标,不是相对与你的Form的,且与你的分辨率有关系 
 public static int FullScreenPosition_X 
  { 
   get 
   { 
   POINTAPI _POINTAPI = new POINTAPI();   GetCursorPos ( ref _POINTAPI ); 
    
   return _POINTAPI.x; 
   } 
  } 
   
  public static int FullScreenPosition_Y 
  { 
   get 
   { 
   POINTAPI _POINTAPI = new POINTAPI();   GetCursorPos ( ref _POINTAPI ); 
    
   return _POINTAPI.y; 
   } 
  }  // 隐藏 显示 鼠标 
 public static void Hide() 
  { 
   ShowCursor( false ) ; 
  } 
   
  public static void Show() 
  { 
   ShowCursor( true ) ; 
  }  // 将鼠标锁定在你的Form里 不过你得将你的Form先锁了,Form Resize 就失效了 
 public static void Lock( System.Windows.Forms.Form ObjectForm ) 
  { 
   RECT _FormRect = new RECT (); 
   
   GetWindowRect( ObjectForm.Handle.ToInt32() , ref _FormRect ); 
   
   ClipCursor( ref _FormRect ); 
  } 
   
  public static void UnLock() 
  { 
   RECT _ScreenRect = new RECT (); 
   
   _ScreenRect.top = 0; 
   _ScreenRect.left = 0; 
   _ScreenRect.bottom = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Bottom; 
   _ScreenRect.right = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Right; 
    
   ClipCursor( ref _ScreenRect ); 
  }  // 鼠标失效,不过失效的好像不只是鼠标,小心哦 
 public static void Disable( System.Windows.Forms.Form ObjectForm ) 
  { 
   EnableWindow( ObjectForm.Handle.ToInt32() , 0 ) ; 
  }  public static void Enable( System.Windows.Forms.Form ObjectForm ) 
  { 
   EnableWindow( ObjectForm.Handle.ToInt32() , 1 ) ; 
  }  // 鼠标自己移动 很想动画哦 参数是2个控件的handle 
  // 看这个方法前,先用凉水擦把脸。。。 反正我写的时候 头晕  public static void Move ( int From_Handle_ToInt32 , int To_Handle_ToInt32 ) 
  { 
   RECT rectFrom = new RECT () ; 
   RECT rectTo = new RECT () ; 
    
   int i ; 
   
   GetWindowRect( From_Handle_ToInt32 , ref rectFrom ) ; 
   GetWindowRect( To_Handle_ToInt32 , ref rectTo ) ;   if ( ( rectFrom.left + rectFrom.right ) / 2 - ( rectTo.left + rectTo.right ) / 2 > 0 ) 
   { 
   for ( i = ( rectFrom.left + rectFrom.right ) / 2 ; i >= ( rectTo.left + rectTo.right ) / 2 ; i-- ) 
   { 
    SetCursorPos ( i , (  + rectFrom.bottom ) / 2) ; 
    Sleep ( 1 ) ; 
   } 
   } 
   else 
   { 
   for ( i = ( rectFrom.left + rectFrom.right ) / 2 ; i <= ( rectTo.left + rectTo.right ) / 2 ; i++ ) 
   { 
    SetCursorPos ( i , (  + rectFrom.bottom ) / 2) ; 
    Sleep ( 1 ) ; 
   } 
   }   if ( (  + rectFrom.bottom ) / 2 - (  + rectTo.bottom ) / 2 > 0 ) 
   { 
   for ( i = (  + rectFrom.bottom ) / 2 ; i >= (  + rectTo.bottom ) / 2 ; i-- ) 
   { 
    SetCursorPos ( ( rectTo.left + rectTo.right ) / 2 , i ) ; 
    Sleep ( 1 ) ; 
   } 
   } 
   else 
   { 
   for ( i = (  + rectFrom.bottom ) / 2 ; i <= (  + rectTo.bottom ) / 2 ; i++ ) 
   { 
    SetCursorPos ( ( rectTo.left + rectTo.right ) / 2 , i ) ; 
    Sleep ( 1 ) ; 
   } 
   } 
  } 
   
  // 得到你的鼠标类型  public static string Type 
  { 
   get 
   { 
   if ( GetSystemMetrics( SM_MOUSEPRESENT ) == 0 ) 
   { 
    return "本计算机尚未安装鼠标" ; 
   } 
   else 
   { 
    if ( GetSystemMetrics( SM_MOUSEWHEELPRESENT ) != 0 ) 
    { 
    return GetSystemMetrics( SM_CMOUSEBUTTONS ) + "键滚轮鼠标" ; 
    } 
    else 
    { 
    return GetSystemMetrics( SM_CMOUSEBUTTONS ) + "键鼠标" ; 
    } 
   } 
   } 
  }  // 设置鼠标双击时间 
   
  public static void DoubleClickTime_Set( int MouseDoubleClickTime ) 
  { 
   SetDoubleClickTime( MouseDoubleClickTime ); 
  } 
   
  public static string DoubleClickTime_Get() 
  { 
   return GetDoubleClickTime().ToString() ; 
  }  // 设置鼠标默认主键 我是没有见过谁左手用鼠标 
 public static void DefaultRightButton() 
  { 
   SwapMouseButton ( 1 ) ; 
  } 
   
  public static void DefaultLeftButton() 
  { 
   SwapMouseButton ( 0 ) ; 
  } 
 } 
 }