• C#-鼠标操作


    获取当前鼠标位置
    int xx = Control.MousePosition.X;
    int yy = Control.MousePosition.Y;
    
    
    
            #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);
            }

  • 相关阅读:
    CSS特效(9)——图片倒影效果
    CSS特效(8)——单行居中,多行居左,超过两行用省略号(绝对定位)
    CSS特效(7)——单行居中,多行居左,超过两行用省略号
    CSS特效(6)——使用 mix-blend-mode 制作文字背景图
    CSS特效(5)——使用 background-clip 制作文字背景图
    CSS特效(4)——使用 background-blend-mode 制作 hover 效果
    CSS特效(3)——target伪类实现tab切换
    CSS特效(2)——input radio、label实现tab切换
    三国志·魏书·牵招传
    vue初体验
  • 原文地址:https://www.cnblogs.com/csnd/p/12062176.html
Copyright © 2020-2023  润新知