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(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2017-01-09 正经学C#_变量与其转换:《c#入门经典》