Ниже я покажу как можно при помощи C# получить позицию курсор мыши на экране и переместить ее, использовать мы будет функцию WinAPI GetCursorPos();
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Threading; namespace CursorPosition { public partial class frmMain : Form { public frmMain() { InitializeComponent(); } [DllImport("user32.dll")] static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, IntPtr dwExtraInfo); public const int MOUSEEVENTF_LEFTDOWN = 0x02; public const int MOUSEEVENTF_LEFTUP = 0x04; public static void SendClick(Point location) { Cursor.Position = location; mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new IntPtr()); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new IntPtr()); } int Count = 0; private void botAction() { Thread.Sleep(2000); SendClick(new Point(500, 660)); // Select mission Thread.Sleep(2000); SendClick(new Point(615, 875)); // Start the Battle! Thread.Sleep(2000); SendClick(new Point(141, 388)); // 9x speed Thread.Sleep(2000); SendClick(new Point(836, 928)); // Back to the Map Thread.Sleep(2000); Thread.Sleep(2000); SendClick(new Point(500, 660)); // Select mission Thread.Sleep(2000); SendClick(new Point(615, 875)); // Start the Battle! Thread.Sleep(2000); SendClick(new Point(141, 388)); // 9x speed Thread.Sleep(2000); SendClick(new Point(836, 928)); // Back to the Map Thread.Sleep(2000); Thread.Sleep(2000); SendClick(new Point(500, 660)); // Select mission Thread.Sleep(2000); SendClick(new Point(615, 875)); // Start the Battle! Thread.Sleep(2000); SendClick(new Point(141, 388)); // 9x speed Thread.Sleep(2000); SendClick(new Point(836, 928)); // Back to the Map Thread.Sleep(2000); SendKeys.Send("{F3}"); //нажимаем кнопку F5 SendKeys.Send("{TAB}"); //нажимаем кнопку F5 Count++; labelCount.Text = Count.ToString(); } [DllImport("user32.dll")] static extern bool GetCursorPos(ref Point lpPoint); //новый код // Получите дескриптор окна приложения. [DllImport("USER32.DLL", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); // Активация окна программы. [DllImport("USER32.DLL")] public static extern bool SetForegroundWindow(IntPtr hWnd); // Отправьте серию нажатий клавиш в приложение Калькулятор. private void Button1_Click(object sender, EventArgs e) { botAction(); } private void timer1_Tick(object sender, EventArgs e) { Point ptCoords = new Point(); GetCursorPos(ref ptCoords); uint x = (uint)ptCoords.X; uint y = (uint)ptCoords.Y; labelX.Text = x.ToString(); labelY.Text = y.ToString(); } private void Button2_Click(object sender, EventArgs e) { // Get a handle to the Calculator application. The window class // and window name were obtained using the Spy++ tool. IntPtr calculatorHandle = FindWindow(null, "Калькулятор"); // Verify that Calculator is a running process. if (calculatorHandle == IntPtr.Zero) { MessageBox.Show("Calculator is not running."); return; } // Make Calculator the foreground application and send it // a set of calculations. SetForegroundWindow(calculatorHandle); SendKeys.SendWait("111"); SendKeys.SendWait("*"); SendKeys.SendWait("11"); SendKeys.SendWait("="); } } }
Так же в примере по мимо определения позиции курсора и его перемещения, я продемонстрировал как можно управлять нажатием клавиш, запускаем калькулятор и вводим в него числа 111 умножая на 11, и выводим результат. Своего рода это бот выполненный на C#, демонстрирующий как можно управлять другими приложениями путем передачи сообщений и управлением курсора.