Ниже я покажу как можно при помощи 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#, демонстрирующий как можно управлять другими приложениями путем передачи сообщений и управлением курсора.
