分类目录

链接

2013年三月
« 2月   4月 »
 123
45678910
11121314151617
18192021222324
25262728293031

近期文章

热门标签

博主推荐

现在位置:    首页 > .NET > 正文
C#鼠标操作
.NET 暂无评论 阅读(984)

        #region 鼠标API

        /// <summary>

        /// 鼠标移动

        /// </summary>

        /// <param name=”X”>目标x坐标</param>

        /// <param name=”Y”>目标y坐标</param>

        /// <returns></returns>

        [DllImport(“user32.dll”)]

        public static extern bool SetCursorPos(int X, int Y);

        [DllImport(“user32.dll”)]

        private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

 

        const int MMove = 0x0001;      //移动鼠标 

        const int LeftDown = 0x0002; //模拟鼠标左键按下 

        const int LeftUp = 0x0004; //模拟鼠标左键抬起 

        const int RightDown = 0x0008;// 模拟鼠标右键按下 

        const int RightUp = 0x0010;// 模拟鼠标右键抬起 

        const int MiddleDown = 0x0020;// 模拟鼠标中键按下 

        const int MiddleUp = 0x0040;// 模拟鼠标中键抬起 

        const int XDown = 0x0080;

        const int XUp = 0x0100;

        const int Wheel = 0x0800;

        const int VirtualDesk = 0x4000;

        const int Absolute = 0x8000;// 标示是否采用绝对坐标 

        #endregion

 

 

/// <summary>

        /// 向下或向上滑动间距(下为负)

        /// </summary>

        /// <param name=”x”></param>

        private void BDMouseWheel(int x)

        {

            int TempMY = 0;

            int TempMY2 = 0;

            while(true)

            {

                if (MainForm.StopAll)

                    return;

                OutNum = 60000;

                Thread.Sleep(100);

                if (TempMY == x)

                {

                    return;

                }

                if (x < 0)

                    TempMY2 = new Random().Next(x – TempMY, 0);

                else

                    TempMY2 = new Random().Next(1, x – TempMY);

                mouse_event(Wheel, 0, 0, TempMY2, 0);

                TempMY += TempMY2;

            }

        }

        /// <summary>

        /// 鼠标移动

        /// </summary>

        /// <param name=”EndP”>目标坐标</param>

        /// <returns>false即没有到达目的</returns>

        private void MouseMove(Point EndP)

        {

            if (EndP.X > Screen.PrimaryScreen.WorkingArea.Size.Width – 50)

            {

                EndP.X = Screen.PrimaryScreen.WorkingArea.Size.Width – 50;

            }

            if (EndP.Y > Screen.PrimaryScreen.WorkingArea.Size.Height – 50)

            {

                EndP.Y = Screen.PrimaryScreen.WorkingArea.Size.Height – 50;

            }

            if (EndP.X <= 0)

            {

                EndP.X = 50;

            }

            if (EndP.Y <= 0)

            {

                EndP.Y = 50;

            }

            //SetCursorPos

            Point NowMouseP = new Point(Control.MousePosition.X, Control.MousePosition.Y);

            Random Rd = new Random(GetRandomSeed());//0,100

            int spl = 50;

            int spIx = 0;

            int spIy = 0;

            bool Xb = false;

            bool Yb = false;

            int Spx = 0;

            int Spy = 0;

            while (NowMouseP != EndP)

            {

                if (MainForm.StopAll)

                    return;

                OutNum = 60000;

                Thread.Sleep(Rd.Next(20,50));

                NowMouseP = new Point(Control.MousePosition.X, Control.MousePosition.Y);

                Spx = NowMouseP.X – EndP.X;

                Spy = NowMouseP.Y – EndP.Y;

                if (Spx > 0)

                    Xb = true;

                else

                    Xb = false;

                if (Spy > 0) 

                    Yb = true;

                else

                    Yb = false;

                Spx = System.Math.Abs(Spx);

                Spy = System.Math.Abs(Spy);

                if (Spx > Spy && Spy > 0 && Spx > 0)

                    spIx = (Spx * spl) / Spy;

                else if (Spx <= Spy && Spy > 0 && Spx > 0)

                    spIy = (Spy * spl) / Spx;

                else

                {

 

                }

                SetCursorPos(

                    NowMouseP.X == EndP.X ? NowMouseP.X : (NowMouseP.X + (Xb ? -(Rd.Next(Spx > spIx ? spIx : Spx) + 1) : (Rd.Next(Spx > spIx ? spIx : Spx) + 1)))

                  , NowMouseP.Y == EndP.Y ? NowMouseP.Y : (NowMouseP.Y + (Yb ? -(Rd.Next(Spy > spIy ? spIy : Spy) + 1) : (Rd.Next(Spy > spIy ? spIy : Spy) + 1)))

                    );

            }

        }

        /// <summary>

        /// 随机轴

        /// </summary>

        /// <returns></returns>

        private int GetRandomSeed()

        {

            byte[] bytes = new byte[4];

            System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();

            rng.GetBytes(bytes);

            return BitConverter.ToInt32(bytes, 0);

        }

        /// <summary>

        /// 鼠标左键点击

        /// </summary>

        private void ClickMouse()

        {

            mouse_event(LeftDown, 0, 0, 0, 0);

            Thread.Sleep(200);

            mouse_event(LeftUp, 0, 0, 0, 0);

        }

本文版权归数据库之家所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:C#鼠标操作 | 数据库之家