/// <summary> /// 鼠标点击指令 /// </summary> /// <param name="GameHandle"></param> /// <param name="xy"></param> /// <param name="delayTime"></param> /// <param name="OffsetX"></param> /// <param name="OffsetY"></param> /// <returns></returns> public static Point Click(GameHandleClass GameHandle, Point xy, int delayTime, int OffsetX = 0, int OffsetY = 0) { try { GlobalObject.GetUIForm().ChangeClickCoordinate($"{xy.X},{xy.Y}", 2); if (!GameHandle.IsSuccess) { throw new Exceptions.NoGameHandleException(); } Delay(delayTime + 50); //延迟 var OffsetXY = new Point(OffsetX, OffsetY); //序列坐标偏移 OffsetXY.Offset(GlobalObject.ClickOffsetXY); // 游戏窗口偏移坐标(poi)// //手动坐标偏移 xy.Offset(OffsetXY); PreviousXY = xy;//记录本次点击坐标 Delay(Random(100, 300)); if (GameHandle.Mode == FunctionHandle.MODE.Handle) { ClickInHandle(GameHandle, xy, OffsetXY); } else if (GameHandle.Mode == FunctionHandle.MODE.Desktop) { ClickInScreen(xy, GameHandle.XY); } else if (GameHandle.Mode == FunctionHandle.MODE.Chorme) { xy.Offset(GameHandle.XY); OffsetXY.Offset(GameHandle.XY); ClickInHandle(GameHandle, xy, OffsetXY); } else { throw new Exceptions.DataErrorException("无法识别正确的游戏取色模式!"); } Delay(Random(200, 400)); return(PreviousXY); } finally { GlobalObject.GetUIForm().ChangeClickCoordinate($"{xy.X},{xy.Y}", 1); } }
//窗口句柄相关成员 /// <summary> /// 自动后台模式 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GameWindow_AutoHandle_button_Click(object sender, EventArgs e) { //自动查找游戏句柄 int SH = Screen.PrimaryScreen.Bounds.Height; //屏幕分辨率高度 int SW = Screen.PrimaryScreen.Bounds.Width; //屏幕分辨率宽度 using (GameHandleClass SeekHandle = new GameHandleClass()) { SeekHandle.Mode = FunctionHandle.MODE.Handle; Point XY = new Point(0, 0); do { SeekHandle.Handle = FunctionHandle.WindowFromPoint(XY); if (XY.X > SW) { XY.X = 0; XY.Y += 100; } else { XY.X += 100; } if ((XY.X > SW) && (XY.Y > SH)) { this.GameWindow_Message_textBox.Text = "自动后台模式抓取失败╭இɷஇ╮"; this.GameWindow_Message_textBox.BackColor = Color.Red; GlobalObject.GameHandle = new GameHandleClass(); RefreshGameWindow_pictureBox(); return; } } while (!SeekHandle.IsWin_800x480()); GlobalObject.GameHandle = new GameHandleClass(SeekHandle); GlobalObject.GameHandle.Mode = FunctionHandle.MODE.Handle; // 更改模式 RefreshGameWindow_treeView(GlobalObject.GameHandle.Handle); // 刷新树状图 this.GameWindow_Message_textBox.Text = "后台模式抓取成功 句柄:" + GlobalObject.GameHandle.Handle.ToString(); this.GameWindow_Message_textBox.BackColor = Color.Lime; RefreshGameWindow_pictureBox(); } }
/// <summary> /// Chorme指定句柄模式 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GameWindow_Handle_button_Click(object sender, EventArgs e) { GameWindow_IsHandleClick = true; using (GameHandleClass SeekHandle = new GameHandleClass()) { try { this.GameWindow_InputIntPtr_textBox.BackColor = Color.White; var result = int.Parse(this.GameWindow_InputIntPtr_textBox.Text); SeekHandle.Handle = new IntPtr(result); } catch (Exception) { this.GameWindow_InputIntPtr_textBox.BackColor = Color.Red; } SeekHandle.Mode = FunctionHandle.MODE.Handle; Point xy = new Point(); if (FunctionJudge.IsGameInWin(SeekHandle.GetGameBitmap(), out xy)) { GlobalObject.GameHandle = new GameHandleClass(SeekHandle) { Mode = FunctionHandle.MODE.Chorme, XY = xy }; RefreshGameWindow_treeView(GlobalObject.GameHandle.Handle); this.GameWindow_Message_textBox.Text = "后台模式抓取成功 chorme句柄:" + GlobalObject.GameHandle.Handle.ToString(); this.GameWindow_Message_textBox.BackColor = Color.Lime; RefreshGameWindow_pictureBox(); } else { RefreshGameWindow_treeView(SeekHandle.Handle); this.GameWindow_Message_textBox.Text = "后台模式抓取失败 句柄:" + SeekHandle.Handle.ToString(); this.GameWindow_Message_textBox.BackColor = Color.Red; GlobalObject.GameHandle = new GameHandleClass(); RefreshGameWindow_pictureBox(); } } }
/// <summary> /// 手动后台模式 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GameWindow_treeView_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar != 13) { return; } else { //指定窗口句柄查找游戏窗口 using (GameHandleClass SeekHandle = new GameHandleClass()) { SeekHandle.Handle = (IntPtr)Convert.ToInt32(GameWindow_HandleList_treeView.SelectedNode.Text); SeekHandle.Mode = FunctionHandle.MODE.Handle; Point xy = new Point(); if (FunctionJudge.IsGameInWin(SeekHandle.GetGameBitmap(), out xy)) { GlobalObject.GameHandle = new GameHandleClass(SeekHandle) { Mode = FunctionHandle.MODE.Chorme, XY = xy }; RefreshGameWindow_treeView(GlobalObject.GameHandle.Handle); this.GameWindow_Message_textBox.Text = "后台模式抓取成功 chorme句柄:" + GlobalObject.GameHandle.Handle.ToString(); this.GameWindow_Message_textBox.BackColor = Color.Lime; RefreshGameWindow_pictureBox(); } else { RefreshGameWindow_treeView(SeekHandle.Handle); this.GameWindow_Message_textBox.Text = "后台模式抓取失败 句柄:" + SeekHandle.Handle.ToString(); this.GameWindow_Message_textBox.BackColor = Color.Red; GlobalObject.GameHandle = new GameHandleClass(); RefreshGameWindow_pictureBox(); } } } }
/// <summary> /// Chorme后台模式 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GameWindow_Handle_button_MouseCaptureChanged(object sender, EventArgs e) { if (GameWindow_IsHandleClick) { GameWindow_IsHandleClick = false; return; } //手动查找游戏句柄 using (GameHandleClass SeekHandle = new GameHandleClass()) { SeekHandle.Handle = FunctionHandle.GetMouseHandle(); SeekHandle.Mode = FunctionHandle.MODE.Handle; if (SeekHandle.IsWin_800x480()) { GlobalObject.GameHandle = new GameHandleClass(SeekHandle) { Mode = FunctionHandle.MODE.Handle }; RefreshGameWindow_treeView(GlobalObject.GameHandle.Handle); this.GameWindow_Message_textBox.Text = "后台模式抓取成功 句柄:" + GlobalObject.GameHandle.Handle.ToString(); this.GameWindow_Message_textBox.BackColor = Color.Lime; RefreshGameWindow_pictureBox(); return; } else//chorme模式 { SeekHandle.Mode = FunctionHandle.MODE.Handle; Point xy = new Point(); if (FunctionJudge.IsGameInWin(SeekHandle.GetGameBitmap(), out xy)) { GlobalObject.GameHandle = new GameHandleClass(SeekHandle) { Mode = FunctionHandle.MODE.Chorme, XY = xy }; RefreshGameWindow_treeView(GlobalObject.GameHandle.Handle); this.GameWindow_Message_textBox.Text = "后台模式抓取成功 chorme句柄:" + GlobalObject.GameHandle.Handle.ToString(); this.GameWindow_Message_textBox.BackColor = Color.Lime; RefreshGameWindow_pictureBox(); } else { // 尝试根父句柄的抓取 SeekHandle.Handle = FunctionHandle.GetTopFatherHandle(SeekHandle.Handle); SeekHandle.Mode = FunctionHandle.MODE.Handle; if (FunctionJudge.IsGameInWin(SeekHandle.GetGameBitmap(), out xy)) { GlobalObject.GameHandle = new GameHandleClass(SeekHandle) { Mode = FunctionHandle.MODE.Chorme, XY = xy }; RefreshGameWindow_treeView(GlobalObject.GameHandle.Handle); this.GameWindow_Message_textBox.Text = "后台模式抓取成功 chorme句柄:" + GlobalObject.GameHandle.Handle.ToString(); this.GameWindow_Message_textBox.BackColor = Color.Lime; RefreshGameWindow_pictureBox(); } else { RefreshGameWindow_treeView(SeekHandle.Handle); this.GameWindow_Message_textBox.Text = "后台模式抓取失败 句柄:" + SeekHandle.Handle.ToString(); this.GameWindow_Message_textBox.BackColor = Color.Red; GlobalObject.GameHandle = new GameHandleClass(); RefreshGameWindow_pictureBox(); } } } } }