找回密码
 立即注册
搜索
查看: 225|回复: 0

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

[复制链接]

18

主题

87

回帖

142

积分

海星

积分
142
发表于 2003-4-12 03:33:43 | 显示全部楼层 |阅读模式
namespace 刘侃ClassLibrary.Hardware
{
        // 0.原创 Using C# and Win32API ( 最近我把所有的Win32API看了1遍 很是过瘾 )
       
        // 1.所有的方法都没有错误处理

        // 2.觉的有用的朋友 给我加点分 我好继续

        // 3.斧头 y 狗狗 你们到哪里去了? 想死我了!
       
        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 ) ;
                }
        }
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|海浩社区

GMT+8, 2025-9-21 09:11 , Processed in 0.070849 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表