C# 使用Win32API移动光标至指定位置并模拟鼠标点击

东西不难。

使用的函数那么几个。

本例是我删除淘宝购物记录时写的,所以是两个坐标点来回移动并点击鼠标左键。

using System;
using System.Runtime.InteropServices;
using System.Threading;

namespace 鼠标移动且点击
{
    public enum MouseType
    {
        //移动鼠标 
        MOUSEEVENTF_MOVE = 0x0001,
        //模拟鼠标左键按下 
        MOUSEEVENTF_LEFTDOWN = 0x0002,
        //模拟鼠标左键抬起 
        MOUSEEVENTF_LEFTUP = 0x0004,
        //模拟鼠标右键按下 
        MOUSEEVENTF_RIGHTDOWN = 0x0008,
        //模拟鼠标右键抬起 
        MOUSEEVENTF_RIGHTUP = 0x0010,
        //模拟鼠标中键按下 
        MOUSEEVENTF_MIDDLEDOWN = 0x0020,
        //模拟鼠标中键抬起 
        MOUSEEVENTF_MIDDLEUP = 0x0040,
        //标示是否采用绝对坐标 
        MOUSEEVENTF_ABSOLUTE = 0x8000,

    }
    class Program
    {

        [System.Runtime.InteropServices.DllImport("user32")]
        public static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

        [DllImport("User32.dll")]
        public static extern bool SetCursorPos(int X, int Y);
        static void Main(string[] args)
        {

            Init();
            Console.ReadKey();
        }
        static int x1, y1, x2, y2;
        private static void DoClick()
        {

            SetCursorPos(x1, y1);
             mouse_event((int)MouseType.MOUSEEVENTF_LEFTDOWN | (int)MouseType.MOUSEEVENTF_LEFTUP, 0,0, 0, 0);
            //mouse_event((int)MouseType.MOUSEEVENTF_RIGHTDOWN | (int)MouseType.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);

           

            string n = $"x1:{x1},y1:{y1}";
            Console.WriteLine(n);
            Thread.Sleep(300);
        }

        private static void DoClickXY2()
        {
            SetCursorPos(x2, y2);
          //  mouse_event((int)MouseType.MOUSEEVENTF_RIGHTDOWN | (int)MouseType.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
               mouse_event((int)MouseType.MOUSEEVENTF_LEFTDOWN | (int)MouseType.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

            string n = $"x2:{x2},y2:{y2}";
            Console.WriteLine(n);
            Thread.Sleep(300);
        }

        private static void InputData()
        {
            Console.WriteLine("x1坐标");
            x1 = int.Parse(Console.ReadLine());
            Console.WriteLine("y1坐标");
            y1 = int.Parse(Console.ReadLine());
            Console.WriteLine("x2坐标");
            x2 = int.Parse(Console.ReadLine());
            Console.WriteLine("y2坐标");
            y2 = int.Parse(Console.ReadLine());
            Console.WriteLine();
            string n = $"x1:{x1},y1:{y1},x2:{x2},y2:{y2}";
            Console.WriteLine(n);
        }

        static  void Init()
        {
            while (true)
            {
                pool();
                Console.WriteLine("是否继续? Y/N");
                var b = Console.ReadKey().KeyChar;
                if (b != 'Y' && b != 'y')
                    break;
            }

        }

        static  void pool()
        {
            Console.WriteLine("执行次数:");

            int num = int.Parse(Console.ReadLine());

            InputData();

            while (num >= 0)
            {
                DoClick();
                Thread.Sleep(100);
                DoClickXY2();
                num--;
            }
            Console.WriteLine();
        }
    }
}

 

上一篇:WPF 使用Win32API 让控件置于WebBrowser上方


下一篇:使用 Selenium + win32api 破解阿里的滑动验证码