zoukankan      html  css  js  c++  java
  • C# 鼠标操作类

      1
      7
      8namespace Windows.Forms.Base
      9{
     10    public class Mouse
     11    {
     12        MouseEventFlag enum
     32
     33        internal const byte SM_CMOUSEBUTTONS = 43;
     34        internal const byte SM_MOUSEPRESENT = 19;
     35        internal const byte SM_MOUSEWHEELPRESENT = 75;
     36
     37        public static int FullScreenPosition_X
     38        {
     39            get
     40            {
     41                POINTAPI _POINTAPI = new POINTAPI();
     42                GetCursorPos(ref _POINTAPI);
     43                return _POINTAPI.x;
     44            }

     45        }

     46
     47        public static int FullScreenPosition_Y
     48        {
     49            get
     50            {
     51                POINTAPI _POINTAPI = new POINTAPI();
     52                GetCursorPos(ref _POINTAPI);
     53                return _POINTAPI.y;
     54            }

     55        }

     56
     57        public static string Type
     58        {
     59            get
     60            {
     61                if (GetSystemMetrics(SM_MOUSEPRESENT) == 0)
     62                {
     63                    return "本计算机尚未安装鼠标";
     64                }

     65                if (GetSystemMetrics(SM_MOUSEWHEELPRESENT) != 0)
     66                {
     67                    return GetSystemMetrics(SM_CMOUSEBUTTONS) + "键滚轮鼠标";
     68                }

     69                return GetSystemMetrics(SM_CMOUSEBUTTONS) + "键鼠标";
     70            }

     71        }

     72
     73        /// <summary>
     74        ///鼠标左右键功能互换
     75        /// </summary>
     76        /// <param name="bSwap"></param>
     77        /// <returns></returns>

     78        [DllImport("user32.dll", EntryPoint = "SwapMouseButton")]
     79        public static extern int SwapMouseButton(int bSwap);
     80
     81        /// <summary>
     82        /// 鼠标的移动区域限制
     83        /// 0为释放限制
     84        /// </summary>
     85        /// <param name="lpRect"></param>
     86        /// <returns></returns>

     87        [DllImport("user32", EntryPoint = "ClipCursor")]
     88        public static extern int ClipCursor(ref RECT lpRect);
     89
     90        /// <summary>
     91        /// 获取鼠标坐标
     92        /// </summary>
     93        /// <param name="lpPoint"></param>
     94        /// <returns></returns>

     95        [DllImport("user32.dll", EntryPoint = "GetCursorPos")]
     96        public static extern int GetCursorPos(ref POINTAPI lpPoint);
     97
     98        /// <summary>
     99        /// 显示和隐藏鼠标指针.  
    100        /// 1为显示0为隐藏 
    101        /// </summary>
    102        /// <param name="bShow"></param>
    103        /// <returns></returns>

    104        [DllImport("user32.dll", EntryPoint = "ShowCursor")]
    105        public static extern bool ShowCursor(bool bShow);
    106
    107        /// <summary>
    108        /// 将非模态窗口显示为模态窗口
    109        /// </summary>
    110        /// <param name="hwnd"></param>
    111        /// <param name="fEnable"></param>
    112        /// <returns></returns>

    113        [DllImport("user32.dll", EntryPoint = "EnableWindow")]
    114        public static extern int EnableWindow(int hwnd, int fEnable);
    115
    116        /// <summary>
    117        /// 获得窗口的大小
    118        /// </summary>
    119        /// <param name="hwnd"></param>
    120        /// <param name="lpRect"></param>
    121        /// <returns></returns>

    122        [DllImport("user32.dll", EntryPoint = "GetWindowRect")]
    123        public static extern int GetWindowRect(int hwnd, ref RECT lpRect);
    124
    125        /// <summary>
    126        /// 设置鼠标坐标
    127        /// </summary>
    128        /// <param name="x"></param>
    129        /// <param name="y"></param>
    130        /// <returns></returns>

    131        [DllImport("user32.dll", EntryPoint = "SetCursorPos")]
    132        public static extern int SetCursorPos(int x, int y);
    133
    134        /// <summary>
    135        /// 返回Win桌面中各种显示单元的宽度和高度、是否安装了鼠标、是否调换了鼠标左右键的定义等
    136        /// </summary>
    137        /// <param name="nIndex"></param>
    138        /// <returns></returns>

    139        [DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]
    140        public static extern int GetSystemMetrics(int nIndex);
    141
    142        /// <summary>
    143        /// 参数wCount,表示鼠标双击时间,为毫秒级,系统默认时间为500
    144        /// </summary>
    145        /// <param name="wCount"></param>
    146        /// <returns></returns>

    147        [DllImport("user32.dll", EntryPoint = "SetDoubleClickTime")]
    148        public static extern int SetDoubleClickTime(int wCount);
    149
    150        /// <summary>
    151        /// 该函数无参数;它的返回值为毫秒,为双击鼠标双击有效的时间间隔。
    152        /// </summary>
    153        /// <returns></returns>

    154        [DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]
    155        public static extern int GetDoubleClickTime();
    156
    157        /// <summary>
    158        /// 只是休眠而已
    159        /// </summary>
    160        /// <param name="dwMilliseconds"></param>

    161        [DllImport("kernel32.DLL", EntryPoint = "Sleep")]
    162        public static extern void Sleep(int dwMilliseconds);
    163
    164        /// <summary>
    165        /// 模拟鼠标操作
    166        /// 调用方法
    167        /// mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0);
    168        /// mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0);
    169        ///    其中X,Y分别是你要点击的点的横坐标和纵坐标 
    170        /// </summary>
    171        /// <param name="dwFlags"></param>
    172        /// <param name="dx"></param>
    173        /// <param name="dy"></param>
    174        /// <param name="dwData"></param>
    175        /// <param name="dwExtraInfo"></param>

    176        [DllImport("user32.dll")]
    177        public static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
    178
    179        // 隐藏 显示 鼠标
    180        public static void Hide()
    181        {
    182            ShowCursor(false);
    183        }

    184
    185        public static void Show()
    186        {
    187            ShowCursor(true);
    188        }

    189
    190        // 将鼠标锁定在你的Form里 不过你得将你的Form先锁了,Form Resize 就失效了
    191        public static void Lock(System.Windows.Forms.Form ObjectForm)
    192        {
    193            RECT _FormRect = new RECT();
    194            GetWindowRect(ObjectForm.Handle.ToInt32(), ref _FormRect);
    195            ClipCursor(ref _FormRect);
    196        }

    197
    198        public static void UnLock()
    199        {
    200            RECT _ScreenRect = new RECT();
    201            _ScreenRect.top = 0;
    202            _ScreenRect.left = 0;
    203            _ScreenRect.bottom = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Bottom;
    204            _ScreenRect.right = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Right;
    205            ClipCursor(ref _ScreenRect);
    206        }

    207
    208        // 鼠标失效,不过失效的好像不只是鼠标,小心哦
    209        public static void Disable(System.Windows.Forms.Form ObjectForm)
    210        {
    211            EnableWindow(ObjectForm.Handle.ToInt32(), 0);
    212        }

    213
    214        public static void Enable(System.Windows.Forms.Form ObjectForm)
    215        {
    216            EnableWindow(ObjectForm.Handle.ToInt32(), 1);
    217        }

    218
    219        // 鼠标自己移动
    220        public static void Move(int From_Handle_ToInt32, int To_Handle_ToInt32)
    221        {
    222            RECT rectFrom = new RECT();
    223            RECT rectTo = new RECT();
    224            int i;
    225            GetWindowRect(From_Handle_ToInt32, ref rectFrom);
    226            GetWindowRect(To_Handle_ToInt32, ref rectTo);
    227            if ((rectFrom.left + rectFrom.right)/2 - (rectTo.left + rectTo.right)/2 > 0)
    228            {
    229                for (i = (rectFrom.left + rectFrom.right)/2; i >= (rectTo.left + rectTo.right)/2; i--)
    230                {
    231                    SetCursorPos(i, (rectFrom.top + rectFrom.bottom)/2);
    232                    Sleep(1);
    233                }

    234            }

    235            else
    236            {
    237                for (i = (rectFrom.left + rectFrom.right)/2; i <= (rectTo.left + rectTo.right)/2; i++)
    238                {
    239                    SetCursorPos(i, (rectFrom.top + rectFrom.bottom)/2);
    240                    Sleep(1);
    241                }

    242            }

    243            if ((rectFrom.top + rectFrom.bottom)/2 - (rectTo.top + rectTo.bottom)/2 > 0)
    244            {
    245                for (i = (rectFrom.top + rectFrom.bottom)/2; i >= (rectTo.top + rectTo.bottom)/2; i--)
    246                {
    247                    SetCursorPos((rectTo.left + rectTo.right)/2, i);
    248                    Sleep(1);
    249                }

    250            }

    251            else
    252            {
    253                for (i = (rectFrom.top + rectFrom.bottom)/2; i <= (rectTo.top + rectTo.bottom)/2; i++)
    254                {
    255                    SetCursorPos((rectTo.left + rectTo.right)/2, i);
    256                    Sleep(1);
    257                }

    258            }

    259        }

    260
    261        // 得到你的鼠标类型
    262
    263        // 设置鼠标双击时间
    264        public static void DoubleClickTime_Set(int MouseDoubleClickTime)
    265        {
    266            SetDoubleClickTime(MouseDoubleClickTime);
    267        }

    268
    269        public static string DoubleClickTime_Get()
    270        {
    271            return GetDoubleClickTime().ToString();
    272        }

    273
    274        // 设置鼠标默认主键
    275        public static void DefaultRightButton()
    276        {
    277            SwapMouseButton(1);
    278        }

    279
    280        public static void DefaultLeftButton()
    281        {
    282            SwapMouseButton(0);
    283        }

    284
    285        Nested type: POINTAPI
    294
    295        Nested type: RECT
    306    }

    307}
  • 相关阅读:
    Html5-audio标签简介及手机端不自动播放问题
    aes加密
    CSS max-width: 0;
    彻底弄清楚session是什么?
    jquery 绑定回车(Enter )事件
    javascript正则表达式总结(test|match|search|replace|split|exec)
    html_entity_decode()、空格、&nbsp; 乱码问题
    HTML <area> 对象
    自定义UEditor右键菜单
    在UEditor编辑器的工具栏上加一行文字
  • 原文地址:https://www.cnblogs.com/guozk/p/1537050.html
Copyright © 2011-2022 走看看