Ниже я покажу как можно при помощи C# получить позицию курсор мыши на экране и переместить ее, использовать мы будет функцию WinAPI GetCursorPos();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
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#, демонстрирующий как можно управлять другими приложениями путем передачи сообщений и управлением курсора.