您当前的位置: 首页 >  c#

一个鼠标类( Using C# and Win32API)

发布时间:2004-10-25 19:45:00 ,浏览量:0

作者:网际浪子        出处:网络 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.top + rectFrom.bottom ) / 2) ;    Sleep ( 1 ) ;   }   }   else   {   for ( i = ( rectFrom.left + rectFrom.right ) / 2 ; i <= ( rectTo.left + rectTo.right ) / 2 ; i++ )   {    SetCursorPos ( i , ( rectFrom.top + rectFrom.bottom ) / 2) ;    Sleep ( 1 ) ;   }   }   if ( ( rectFrom.top + rectFrom.bottom ) / 2 - ( rectTo.top + rectTo.bottom ) / 2 > 0 )   {   for ( i = ( rectFrom.top + rectFrom.bottom ) / 2 ; i >= ( rectTo.top + rectTo.bottom ) / 2 ; i-- )   {    SetCursorPos ( ( rectTo.left + rectTo.right ) / 2 , i ) ;    Sleep ( 1 ) ;   }   }   else   {   for ( i = ( rectFrom.top + rectFrom.bottom ) / 2 ; i <= ( rectTo.top + 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 ) ;  } } }
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    108697博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1538s