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);elseTempMY2 = 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;}//SetCursorPosPoint NowMouseP = new Point(Control.MousePosition.X, Control.MousePosition.Y);Random Rd = new Random(GetRandomSeed());//0,100int 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;elseXb = false;if (Spy > 0) Yb = true;elseYb = 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);}
總結