基于Xejen框架实现的C# winform鼠标点击器、电脑按键自动点击器的软件开发及介绍

功能演示

文章开始之前,仍然是先来个视频,以便用户知道鼠标连点器的基本功能


 

软件主界面

多功能鼠标连点器

快速点击:

痕即鼠标点击器可以设定每秒点击次数,让您轻松应对高频点击需求。

切换时长,即每次动作之间的间隔时间,最小设置为1毫秒,那么理论上1秒内最多产生1000次动作


定时功能:

您可以预设点击开始和结束时间,做到自动操作。

打开全局配置,如图所示,提供3种定时作业:特定时间、每天定点、周期循环,您根据自己需要选择


多种点击模式:

支持左键、右键、中键点击,满足各种操作需求。

如上图,支持高达9种动作模式,请问谁有这么全,就问你牛不牛,够不够!

自定义点击间隔:

根据不同需求设置点击间隔,精确到毫秒,确保操作准确无误。

如上图,不要选中“随机”,则可以精确指定时间间隔,若选中了“随机”,那么就将在范围内随机生成一个时间间隔,动作之间的最小间隔时间是1毫秒,即1秒内理论上最多1000次动作。

坐标偏移(防外挂):

用于防止鼠标固定在同一个位置重复执行,要不然可能被您使用的系统监控到你可能使用外挂。

此功能坐标偏移 + 切换时长随机,双层结合是为了防止您被您的系统判定为您在使用外挂。

实际案例:temu抢仓库


使用简单,界面友好

就问你这样的操作界面,清不清爽?!牛不牛逼?!
是不是比其它人的一堆看起来头疼的设置,简单易用多了?!

核心代码

        /// <summary>/// 开始运行/// </summary>public async Task RunAsync(){if (_loadedForms != null){foreach (var form in _loadedForms){form.Invoke(new System.Action(() =>{((ActionForm)form).SetWindowExStyle();}));}}else{return;}ActionData recordData = _actionData;if (recordData == null || recordData.Actions == null || recordData.Actions.Count == 0){return;}lock (recordData){if (_running){return;}}//keyboardHook.Start();_running = true;int l = 0;_totalCount = 0;this.Start?.Invoke(this, EventArgs.Empty);await Task.Run(() =>{Random random = new Random();while (_running){if (_actionConfig.Loop > 0){if (l >= _actionConfig.Loop){_running = false;this.Stop();this.Complete?.Invoke(this, EventArgs.Empty);MessagingCenter.Send(ActionSheduleCompleteMessageName, this);break;}l++;}_totalCount++;//Debug.WriteLine("循环几次了:" + l);foreach (ActionSegment action in recordData.Actions){OffsetParameter offsetParameter = action.ActionParameter.OffsetParameter;int xOffset = 0;int yOffset = 0;if (offsetParameter != null){xOffset = random.Next(offsetParameter.XOffset.Start, offsetParameter.XOffset.End);yOffset = random.Next(offsetParameter.YOffset.Start, offsetParameter.YOffset.End);}switch (action.Type){case ActionType.MouseClick:if (_running){if (action.ActionParameter.GraphicParameter != null && !string.IsNullOrEmpty(action.ActionParameter.GraphicParameter.FilePath)){//_stopwatch.Restart();var matchPoints = _shapeMatch.Match(action.ActionParameter.GraphicParameter.FilePath);//_stopwatch.Stop();//Debug.WriteLine("耗时毫秒:" + _stopwatch.ElapsedMilliseconds);if (matchPoints == null || matchPoints.Length == 0){break;}ActionForm form = _loadedForms.First(q => q.Action == action);form.BeginInvoke(new System.Action(() =>{form.ChangePosition(new Point { X = matchPoints[0].X - form.Width / 2, Y = matchPoints[0].Y - form.Height / 2 });MouseSimulator.Click(matchPoints[0].X, matchPoints[0].Y);}));}else{Point point1 = new Point(action.ActionParameter.StartPoint.X + xOffset, action.ActionParameter.StartPoint.Y + yOffset);MouseSimulator.Click(point1.X, point1.Y);}}break;case ActionType.MouseDoubleClick:if (_running){if (action.ActionParameter.GraphicParameter != null && !string.IsNullOrEmpty(action.ActionParameter.GraphicParameter.FilePath)){var matchPoints = _shapeMatch.Match(action.ActionParameter.GraphicParameter.FilePath);if (matchPoints == null || matchPoints.Length == 0){break;}ActionForm form = _loadedForms.First(q => q.Action == action);form.BeginInvoke(new System.Action(() =>{form.ChangePosition(new Point { X = matchPoints[0].X - form.Width / 2, Y = matchPoints[0].Y - form.Height / 2 });MouseSimulator.DoubleClick(matchPoints[0].X, matchPoints[0].Y);}));}else{Point point2 = new Point(action.ActionParameter.StartPoint.X + xOffset, action.ActionParameter.StartPoint.Y + yOffset);MouseSimulator.DoubleClick(point2.X, point2.Y);}}break;case ActionType.MouseRightClick:if (_running){if (action.ActionParameter.GraphicParameter != null && !string.IsNullOrEmpty(action.ActionParameter.GraphicParameter.FilePath)){var matchPoints = _shapeMatch.Match(action.ActionParameter.GraphicParameter.FilePath);if (matchPoints == null || matchPoints.Length == 0){break;}ActionForm form = _loadedForms.First(q => q.Action == action);form.BeginInvoke(new System.Action(() =>{form.ChangePosition(new Point { X = matchPoints[0].X - form.Width / 2, Y = matchPoints[0].Y - form.Height / 2 });MouseSimulator.RightClick(matchPoints[0].X, matchPoints[0].Y);}));}else{Point point3 = new Point(action.ActionParameter.StartPoint.X + xOffset, action.ActionParameter.StartPoint.Y + yOffset);MouseSimulator.RightClick(point3.X, point3.Y);}}break;case ActionType.MouseMiddleClick:if (_running){if (action.ActionParameter.GraphicParameter != null && !string.IsNullOrEmpty(action.ActionParameter.GraphicParameter.FilePath)){var matchPoints = _shapeMatch.Match(action.ActionParameter.GraphicParameter.FilePath);if (matchPoints == null || matchPoints.Length == 0){break;}ActionForm form = _loadedForms.First(q => q.Action == action);form.BeginInvoke(new System.Action(() =>{form.ChangePosition(new Point { X = matchPoints[0].X - form.Width / 2, Y = matchPoints[0].Y - form.Height / 2 });MouseSimulator.MiddleClick(matchPoints[0].X, matchPoints[0].Y);}));}else{Point point4 = new Point(action.ActionParameter.StartPoint.X + xOffset, action.ActionParameter.StartPoint.Y + yOffset);MouseSimulator.MiddleClick(point4.X, point4.Y);}}break;case ActionType.MouseDrag:if (_running){if (action.ActionParameter.GraphicParameter != null && !string.IsNullOrEmpty(action.ActionParameter.GraphicParameter.FilePath)){var matchPoints = _shapeMatch.Match(action.ActionParameter.GraphicParameter.FilePath);if (matchPoints == null || matchPoints.Length == 0){break;}ActionForm form = _loadedForms.First(q => q.Action == action);form.BeginInvoke(new System.Action(() =>{form.ChangePosition(new Point { X = matchPoints[0].X - form.Width / 2, Y = matchPoints[0].Y - form.Height / 2 });Point end = new Point(action.ActionParameter.EndPoint.X + xOffset, action.ActionParameter.EndPoint.Y + yOffset);MouseSimulator.Drag(matchPoints[0].X, matchPoints[0].Y, end.X, end.Y);}));}else{Point start = new Point(action.ActionParameter.StartPoint.X + xOffset, action.ActionParameter.StartPoint.Y + yOffset);Point end = new Point(action.ActionParameter.EndPoint.X + xOffset, action.ActionParameter.EndPoint.Y + yOffset);MouseSimulator.Drag(start.X, start.Y, end.X, end.Y);}}break;case ActionType.Sleep:if (_running){//await Task.Delay(Convert.ToInt32(action.Parameter.Value));//用Thread.Sleep比Task.Delay的效果要好很多,特别是在很微小的休眠时间的时候//可能是因为Task.Delay有5ms下限值的原因SleepParameter sleepParameter = action.ActionParameter.Value as SleepParameter;if (sleepParameter == null){sleepParameter = JsonConvert.DeserializeObject<SleepParameter>(action.ActionParameter.Value.ToString());}if (sleepParameter.IsRandom){var interval = random.Next(sleepParameter.Start, sleepParameter.End);Thread.Sleep(interval);}else{Thread.Sleep(sleepParameter.Start);}}break;case ActionType.Content:if (_running){MainForm.Instance.Invoke(new System.Action(() =>{KeyboardSimulator.TextPaste(action.ActionParameter?.Value?.ToString());}));}break;case ActionType.Enter:if (_running){MainForm.Instance.Invoke(new System.Action(() =>{KeyboardSimulator.Enter();}));}break;case ActionType.LongPress:if (_running){if (action.ActionParameter.GraphicParameter != null && !string.IsNullOrEmpty(action.ActionParameter.GraphicParameter.FilePath)){var matchPoints = _shapeMatch.Match(action.ActionParameter.GraphicParameter.FilePath);if (matchPoints == null || matchPoints.Length == 0){break;}ActionForm form = _loadedForms.First(q => q.Action == action);form.BeginInvoke(new System.Action(() =>{form.ChangePosition(new Point { X = matchPoints[0].X - form.Width / 2, Y = matchPoints[0].Y - form.Height / 2 });MouseSimulator.LongPress(matchPoints[0].X, matchPoints[0].Y, Convert.ToInt32(action.ActionParameter.Value));}));}else{Point point6 = new Point(action.ActionParameter.StartPoint.X + xOffset, action.ActionParameter.StartPoint.Y + yOffset);MouseSimulator.LongPress(point6.X, point6.Y, Convert.ToInt32(action.ActionParameter.Value));}}break;default:break;}}}});}

可提供程序生成包,通过主页可见我的介绍方式

祝您用餐愉快。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1489449.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

0719_驱动3 printk使用方法

一、printk使用方法 1.应用层打印使用printf&#xff0c;内核层使用printk 2.如何查看内核层中printk如何使用 3.在内核空间执行grep "printk" * -nR 4.在内核空间执行vi -t KERN_INFO 5.printk有8中打印级别&#xff08;0-7&#xff09;&#xff0c;打印级别用来过滤…

数据结构(Java):反射枚举Lambda表达式

目录 1、反射 1.1 反射的定义 1.2 反射机制的原理 1.3 反射相关类 1.4 Class类 1.4.1 相关方法 1.4.1.1 常用获得类相关的方法 ​编辑 1.4.1.2 常用获得类中属性相关的方法 1.4.1.3 获得类中构造器相关的方法 1.4.1.4 获得类中方法相关的方法 1.4.2 获取Class对象 1.…

linux进程——虚拟地址空间——重新认识进程!!!

前言&#xff1a; 本节内容就将进入linux进程里面的又一个大板块&#xff0c; 博主认为这个板块和PCB的板块是平级——两者独立&#xff1b;之前友友们可能认为进程分为PCB和代码与数据。 但是本节过后&#xff0c; 我们可以对进程重新定义——进程 &#xff08;PCB&#xff0…

深入理解计算机系统 CSAPP 家庭作业11.8

回收子进程是书本537页的内容 在tiny.c文件加以下代码,记得重新编译哦 书中提到CGI是在动态内容中的,所以题目的意思应该是在动态内容里面回收 void handler1(int sig) {int olderrno errno;while (waitpid(-1,NULL,0)>0){Sio_puts("Handler reaped child\n");…

【秋招突围】2024届秋招笔试-OPPO笔试题-第一套-三语言题解(Java/Cpp/Python)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新 OPPO 春秋招笔试题**汇总&#xff5e; &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; ✨ 笔试合集传送们 -> &#x1f9f7;春秋招笔试合集 &#x1f380; 01.K小姐的快…

DVWA中命令执行漏洞细说

在攻击中&#xff0c;命令注入是比较常见的方式&#xff0c;今天我们细说在软件开发中如何避免命令执行漏洞 我们通过DVWA中不同的安全等级来细说命令执行漏洞 1、先调整DVWA的安全等级为Lower,调整等级在DVWA Security页面调整 2、在Command Injection页面输入127.0.0.1&…

【计算机网络】物理层(第2章)大纲(共70+页)

最后只复习了1.5天&#xff0c;应用层简单过了一遍。 本来是mindmap的&#xff0c;但是太大了只能导出成提纲了&#xff0c;凑合看吧orz。 如果你找我要源文件&#xff0c;最好是在2024年&#xff0c;不然我可能就找不到了&#xff08;&#xff09;。

C# Task.WaitAll 的用法

目录 简介 1.WaitAll(Task[], Int32, CancellationToken) 2.WaitAll(Task[]) 3.WaitAll(Task[], Int32) 4.WaitAll(Task[], CancellationToken) 5.WaitAll(Task[], TimeSpan) 结束 简介 Task.WaitAll 是 C# 中用于并行编程的一个的方法&#xff0c;它属于 System.Threa…

蓝牙耳机百元之内怎么选?四款百元精品爆款蓝牙耳机盘点

在蓝牙耳机的海洋中&#xff0c;百元价位仿佛是一片神秘的绿洲&#xff0c;既诱人又充满未知&#xff0c;如何在众多选项中挑选出真正的精品呢&#xff1f;蓝牙耳机百元之内怎么选&#xff1f;这是许多消费者的共同疑问&#xff0c;带着这个疑问&#xff0c;作为蓝牙耳机发烧党…

2024101读书笔记|《飞花令·冬》——三冬雪压千年树,四月花繁百尺藤

2024101读书笔记|《飞花令冬》——三冬雪压千年树&#xff0c;四月花繁百尺藤 《飞花令冬&#xff08;中国文化古典诗词品鉴&#xff09;》素心落雪 编著&#xff0c;飞花令得名于唐代诗人韩翃《寒食》中的名句“春城无处不飞花”&#xff0c;类似于行酒令&#xff0c;是文人们…

在Mac上恢复永久删除的Excel文件,有效方法学习!

丢失 Mac 上的重要 Excel 文件可能是一场噩梦&#xff0c;尤其是如果它们被永久删除的话。相信我&#xff0c;这种感觉是没人愿意经历的。但不要惊慌&#xff1b;您可以选择恢复这些文件。无论是通过垃圾箱删除还是由于系统错误意外丢失&#xff0c;都有多种方法可以恢复您的数…

STM32嵌入式人工智能边缘计算应用教程

目录 引言环境准备边缘计算系统基础代码实现&#xff1a;实现嵌入式人工智能边缘计算系统 4.1 数据采集模块 4.2 数据处理与推理模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;边缘计算与优化问题解决方案与优化收尾与总结 1. 引言 嵌入式人工智…

深度学习的前沿主题:GANs、自监督学习和Transformer模型

&#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ &#x1f48e;1. 介绍 深度学习在人工智能领域中占据了重要地位&#xff0c;特别是生成对抗网络&#xff08;GANs&#xff09;、自监督学习和Transformer模型的出现&#xff0c;推动了图像生成、自然语言处理等多个领域的创…

Docker Desktop安装(通俗易懂)

1、官网 https://www.docker.com/products/docker-desktop/ 2、阿里云镜像 docker-toolbox-windows-docker-for-windows安装包下载_开源镜像站-阿里云 1. 双击安装文件勾选选项 意思就是&#xff1a; Use WSL 2 instead of Hyper-V (recommended) : 启用虚拟化&#xff0c;…

2024年【非高危行业生产经营单位主要负责人解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 非高危行业生产经营单位主要负责人及安全管理人员安全生产知识和管理能力考试报名是安全生产模拟考试一点通生成的&#xff0c;非高危行业生产经营单位主要负责人及安全管理人员安全生产知识和管理能力证模拟考试题库…

基于DMASM镜像的DMDSC共享存储集群部署

DMv8镜像模式共享存储集群部署 环境说明 操作系统&#xff1a;centos7.6 服务器&#xff1a;2台虚拟机 达梦数据库版本&#xff1a;达梦V8 安装前准备工作 参考文档《DM8共享存储集群》-第11、12章节 参考文档《DM8_Linux服务脚本使用手册》 1、系统环境(all nodes) 1…

Go-Zero 数据库实战:配置、建模与业务逻辑一体化

前言 在之前的几篇文章中&#xff0c;我们深入学习了Go-Zero框架的实战应用&#xff0c;包括模板定制化、API定义、抽奖算法设计等内容。本文将继续探索Go-Zero框架的实践技巧&#xff0c;并介绍一些与数据库操作相关的主题。 在现代应用程序开发中&#xff0c;对数据库的操作…

matlab仿真 数字基带传输(上)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第六章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all nsamp10;%每个脉冲信号的抽样点数 s0ones(1,nsamp);%基带脉冲信号&#xff0c;其中s0的信号为1,1,1,1,1,1,1,1,1,1 …

【笔记】缺少DLL文件 Cannot import dll:C\Users\xxx\...\madd.dll

报错 原因 杀毒软件拦截了程序解决&#xff1a;关闭该软件 &#xff08;1&#xff09;电脑右下角&#xff08;↑&#xff09;&#xff0c;找到杀毒软件&#xff08;我电脑是 联想杀毒Plus&#xff09; &#xff08;2&#xff09;找到 “更改设置” - 选择 “实时扫描” &#…

vue3 使用Mock

官网: http://mockjs.com/ 安装 npm install mockjs -Dsteps1: main.js 文件引入 import /api/mock.jssteps2: src/api/mock.js import Mock from mockjs import homeApi from ./mockData/home /*** 1.拦截的路径:mock拦截了正常NetWork/网络请求,数据正常响应* 2.方法* …