易语言模拟真人动态生成鼠标滑动路径
一.简介
鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。
鼠标轨迹算法的底层实现采用C/C++语言,原因在于C/C++提供了高性能的执行能力和直接访问操作系统底层资源的能力。
鼠标轨迹算法具有以下优势:
- 模拟人工轨迹:算法能够模拟出非贝塞尔曲线的自然鼠标移动,避免了机械式的直线移动。
- 适当的停顿/加速/减速:算法能够根据需要模拟出鼠标的停顿、加速和减速,使得轨迹更加真实。
- 随机轨迹:在固定两点间,算法能够生成不同的随机轨迹,增加了轨迹的不可预测性。
二.应用场景
- 游戏鼠标轨迹检测(检测能过无畏fps类型、传奇、梦幻等游戏,已经在游戏中验证)
- 滑块拖动验证
- 部分网页鼠标轨迹检测
三.支持多种编程语言
1.C++头文件
/******************************************************************************************/@SDK功能描述:C++鼠标轨迹/******************************************************************************************/#ifndef _SN_SDK_H__#define _SN_SDK_H__#include <windows.h>//返回参数typedef struct SN_RESULT {int code; //错误码,如果为 0 表示成功,否则表示错误号char message[4096]; //错误信息,如果为 "OK" 表示成功,否则返回错误信息}SN_RESULT;//坐标参数typedef struct SN_POINT{int x; //屏幕坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)int y; //屏幕坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)}SN_POINT;//轨迹参数typedef struct SN_POINT_PARAMS{struct SN_POINT point;//屏幕坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)int delayTime; //延时时间(单位:毫秒),仅供参考}SN_POINT_PARAMS;/*创建句柄
*
* 参数:
* [in] szKey: 卡密
* [out] pResult: 返回错误信息,参数pResult.code(错误码)如果为 0 表示成功,否则表示错误号;
*
* 返回值:成功返回句柄,失败返回NULL
*
*/HANDLE WINAPI apiSNCreateHandle(char* szKey, SN_RESULT* pResult);/*获取鼠标移动轨迹
*
* 参数:
* [in] handle: 句柄(通过调用apiSNCreateHandle得到)
* [in] startPoint: 开始坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
* [in] endPoint: 结束坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
* [out] points: 轨迹数组,如果数组中元素 point 出现(-1,-1),表示鼠标轨迹结束
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/SN_RESULT WINAPI apiSNMouseMove(HANDLE handle, SN_POINT startPoint, SN_POINT endPoint, SN_POINT_PARAMS* points);/*获取版本号
*
* 参数:
* [in] handle: 句柄(通过调用apiSNCreateHandle得到)
* [out] szVersion: 版本号
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/SN_RESULT WINAPI apiSNGetVersion(HANDLE handle, char* szVersion);/*获取错误信息
*
* 参数:
* [in] handle: 句柄(通过调用apiSNCreateHandle得到)
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/SN_RESULT WINAPI apiSNGetError(HANDLE handle);/*释放句柄(内存)
*
* 参数:
* [in] handle: 句柄(通过调用apiSNCreateHandle得到)
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/SN_RESULT WINAPI apiSNDestroyHandle(HANDLE handle);#endif // !_SN_SDK_H__
2.其他编程语言
为了易于集成和使用,我们将鼠标轨迹算法封装为DLL(动态链接库)。这种封装方式不仅保留了算法的性能优势,还提供了跨平台和跨语言的兼容性,目前支持编程语言如下:
- C++
- Python
- 易语言
推算轨迹算法耗时均为毫秒级,<= 5ms ,速度超快,fps类型游戏完全无压力!
3.鼠标轨迹API调用流程图
注意:如果是多线程,每个线程都需要通过apiSNCreateHandle创建HANDLE句柄,这样才能多个线程互不影响
4.易语言加载C++鼠标轨迹dll接口
.版本 2
.支持库 spec.程序集 窗口程序集_启动窗口.子程序 _启动子程序, 整数型_临时子程序 ()
返回 (0).子程序 _临时子程序
.局部变量 handle, 整数型
.局部变量 pResult, SN_RESULT, 静态, , 返回错误信息,参数pResult.code(错误码)如果为 0 表示成功,否则表示错误号;
.局部变量 startPoint, SN_POINT, , , 开始坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
.局部变量 endPoint, SN_POINT, , , 结束坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
.局部变量 points, SN_POINT_PARAMS, , "3000", 轨迹数组,如果数组中元素 point 出现(-1,-1),表示鼠标轨迹结束
.局部变量 index, 整数型' ---------------------------------------------------------------
' 1.创建句柄
' 其中卡密 SNKJww1gc5tmDZJWhD21DLArs6vV8DXzQPgW7c9y6e2w 仅用于测试,需要找开发人员重新购买,
' ---------------------------------------------------------------
handle = apiSNCreateHandle (“SNKJww1gc5tmDZJWhD21DLArs6vV8DXzQPgW7c9y6e2w”, “SNTrack.onnx”, pResult)
调试输出 (pResult.code, 到文本 (pResult.message))
调试输出 (“句柄”, handle)
.如果真 (pResult.code < 0)调试输出 (“-----------程序结束-----------”)返回 ().如果真结束startPoint.x = 10
startPoint.y = 10endPoint.x = 100
endPoint.y = 100调试输出 (“预备定义数组数量”, 取数组成员数 (points))
' ---------------------------------------------------------------
' 2.获取鼠标轨迹
' ---------------------------------------------------------------
apiSNMouseMove (handle, startPoint, endPoint, points)调试输出 (取变量地址 (startPoint.x), 取变量地址 (startPoint.y))
.计次循环首 (取数组成员数 (points), index).如果真 (points [index].point.x = -1 且 points [index].point.y = -1)删除成员 (points, index + 1, 10000 - index)跳出循环 ().如果真结束' 调试输出 (index, “坐标”, points [index].point.x, points [index].point.y, points [index].delayTime)
.计次循环尾 ()
调试输出 (取数组成员数 (points)).计次循环首 (取数组成员数 (points), index)调试输出 (“坐标”, points [index].point.x, points [index].point.y, points [index].delayTime)
.计次循环尾 ()' ---------------------------------------------------------------
' 3.释放内存
' ---------------------------------------------------------------
apiSNDestroyHandle (handle)
调试输出 (“-----------程序结束-----------”)
5.云盘源码下载
- 百度云盘
- 夸克云盘
- 123云盘
云盘目录介绍:
demo - 包含各种编程语言的demo
dll - 分别是x86和x64平台所需要的dll/lib/h文件
windows 鼠标轨迹测试工具 - exe测试鼠标轨迹效果( demo 中的 c++ 工程编译后的exe可执行文件)
四.效果演示
1.开始坐标为(100,100),结束坐标为(800,800),通过调用接口获得 4 条鼠标轨迹
2.开始坐标为(1000,100),结束坐标为(800,800),通过调用接口获得 2 条鼠标轨迹
五.常见问题
1.是否支持多线程
支持
2.如何使用多线程
参考前面的《2.鼠标轨迹API调用流程图》,多线程和单线程类似;如果是多线程,那么每个线程都需要通过apiSNCreateHandle创建HANDLE句柄,这样才能多个线程互不影响
六.更新日志
- 2024.09.28 新增易语言demo
- 2024.09.21 修复部分水平/垂直轨迹出现负数的情况
- 2024.09.19 优化部分轨迹延迟时间为0的情况(可能会造成鼠标瞬移)
- 2024.08.20 优化部分轨迹可能出现负数的问题
- 2024.07.15 优化水平/垂直轨迹
- 2024.06.25 新增错误日志信息
- 2024.06.06 python 模拟人工鼠标轨迹demo
- 2024.02.06 c++ 模拟人工鼠标轨迹demo
相关文章:

易语言模拟真人动态生成鼠标滑动路径
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...

Linux:生态与软件安装
文章目录 前言一、Linux下安装软件的方案二、包管理器是什么?三、生态问题相关的理解1. 什么操作系统是好的操作系统?2. 什么是生态?3. 软件包是谁写的?这些工程师为什么要写?钱的问题怎么解决? 四、我的服务器怎么知…...
R 语言与其他编程语言的区别
R 语言与其他编程语言的区别 R 语言作为一种专门用于统计计算和图形的编程语言,与其他编程语言相比有一些独特的特点和区别。本文将详细介绍这些区别,帮助你更好地理解 R 语言的优势和适用场景。 1. 专为统计和数据分析设计 统计功能 内置统计函数&…...

RC低通滤波器Bode图分析(传递函数零极点)
RC低通滤波器 我们使得R1K,C1uF;电容C的阻抗为Xc; 传递函数 H ( s ) u o u i X C X C R 1 s C 1 s C R 1 1 s R C (其中 s j ω ) H(s)\frac{u_{o} }{u_{i} } \frac{X_{C} }{X_{C}R} \frac{\frac{1}{sC} }{\…...
基于深度学习的网络入侵检测
基于深度学习的网络入侵检测是一种利用深度学习技术对网络流量进行实时监测与分析的方法,旨在识别并防范网络攻击和恶意活动。随着网络环境日益复杂,传统的入侵检测系统(IDS)在面对不断变化的攻击模式时,往往难以保持高…...
《构建一个具备从后端数据库获取数据并再前端显示的内容页面:前后端实现解析》
一、前端页面:布局与功能 1. 页面结构 我们先来看前端页面的 HTML 结构,它主要由以下几个部分组成: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewp…...

Rust 力扣 - 59. 螺旋矩阵 II
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 使用一个全局变量current记录当前遍历到的元素的值 我们只需要一圈一圈的从外向内遍历矩阵,每一圈遍历顺序为上边、右边、下边、左边,每遍历完一个元素后current 我们需要注意的是如果上…...

2.4w字 —TS入门教程
目录 1. 什么是TS 2. TS基本使用 3 TS基础语法 3.1 基础类型约束 3.11 string,number,boolean, null和undefined 3.12 any 3.13 unknown 3.14 void 3.15 数组 3.16 对象 3.2 函数的约束 3.21 普通写法 3.22 函数表达式 3.22 可选…...

java: 未结束的字符文字 报错及解决:将编码全部改为UTF-8或者GBK
报错: 解决: 将编码都改成UTF-8或者GBK:...

Android平台RTSP转RTMP推送之采集麦克风音频转发
技术背景 RTSP转RTMP推送,好多开发者第一想到的是采用ffmpeg命令行的形式,如果对ffmpeg比较熟,而且产品不要额外的定制和更高阶的要求,未尝不可,如果对产品稳定性、时延、断网重连等有更高的技术诉求,比较…...

认证鉴权框架之—sa-token
一、概述 Satoken 是一个 Java 实现的权限认证框架,它主要用于 Web 应用程序的权限控制。Satoken 提供了丰富的功能来简化权限管理的过程,使得开发者可以更加专注于业务逻辑的开发。 二、逻辑流程 1、登录认证 (1)、创建token …...
Spring源码(十一):Spring MVC之DispatchServlet
本篇重点在于分析Spring MVC与Servlet标准的整合,下节将详细讨论Spring MVC的启动/加载流程、处理请求的具体流程。 一、介绍 Spring框架提供了构建Web应用程序的全功能MVC模块。通过策略接口 ,Spring框架是高度可配置的,而且支持多种视图技…...
gitbash简单操作
https://blog.csdn.net/qq_42363495/article/details/104878170 工作区(空间)--暂存区--本地仓库--远程仓库 方法一:创建一个新的分支master,且远程库里没有该分支 只要将.gitignore文件放在文件夹下就可以,.gitignore是文本文档形式的文件…...
pnpm install安装element-plus的版本跟package.json指定的版本不一样
pnpm安装的版本不同于package.json中指定的版本可能是由于以下几种情况导致的: 依赖项冲突:当项目依赖的不同模块或库之间存在版本冲突时,pnpm可能会安装与package.json中指定的版本不同的版本。这可能是因为其他依赖项指定了不同的版本&…...

Java线程池的核心内容详解
文章内容已经收录在《面试进阶之路》,从原理出发,直击面试难点,实现更高维度的降维打击! 目录 文章目录 目录Java线程池的核心内容详解线程池的优势什么场景下要用到线程池呢?线程池中重要的参数【掌握】新加入一个任…...

学习笔记——三小时玩转JQuery
也可以使用在线版,不过在线版需要有网络,网不好的情况下加载也不好 取值的时候也是只会取到有样式的纯文本,不会取到标签,会取到标签效果 prepend和append这两个方法用的比较多,before和affter用的比较少 想要把代码写…...
word试题转excel(最简单的办法,无格式要求)
分享早下班的终极秘诀~ 今天本来是个愉快的周五,心里想着周末的聚会和各种安排,然而突然一个加急任务砸了过来——要求在下周一提交一份精细整理的Excel表格! 打开Word文件一看,成堆的试题内容需要整理到Excel里。看着满屏的题目…...

基于web的中小学成绩管理系统的设计与实现
目录 第一章 研究背景与意义 1.1 研究背景 1.2 研究意义 1.3 研究目的 第二章 关于系统的设计 2.1系统总体架构设计 2.2功能模块设计 2.3数据存储与管理 第三章 系统功能介绍 3.1成绩录入及发布 3.2班级管理和学生管理 3.3成绩分析结果展示 3.4用户反馈与改进 …...

Conmi的正确答案——在Kibana中进入Elasticsearch的索引管理页面
Elasticsearch版本:7.17.25 Kibana版本:7.17.25 注:索引即类似mysql的表。 0、进入首页 1、未创建任何“索引模式”时: 1.1、点击左边的三横菜单; 1.2、点击“Discover”,进入“发现”页面; 2…...

【JavaEE】【多线程】进阶知识
目录 一、常见的锁策略1.1 悲观锁 vs 乐观锁1.2 重量级锁 vs 轻量级锁1.3 挂起等待锁 vs 自旋锁1.4 普通互斥锁 vs 读写锁1.5 可重入锁 vs 不可重入锁1.6 不公平锁 vs 公平锁 二、synchronized特性2.1 synchronized的锁策略2.2 synchronized加锁过程2.3 其它优化措施 三、CAS3.…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...