Как получить позицию курсора C#

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.