易语言模拟真人动态生成鼠标滑动路径
一.简介
鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。
鼠标轨迹算法的底层实现采用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.…...
超大规模云服务外计算资源交易:虽有风险但概念已验证,或成新资源获取选项
经济合理性这一趋势积极面易理解。一是价格,有多余计算能力的非超大规模云服务提供商成本结构等与主要供应商不同,闲置资源或低价出售,对控制成本企业重要。二是效率,利用已有计算能力满足需求,无需新建数据中心等&…...
AI应用成本监控实战:基于令牌预算的LLM API调用管理与优化
1. 项目概述与核心价值最近在折腾AI应用开发,特别是那些基于大语言模型API(比如OpenAI、Anthropic、Claude等)的项目时,有一个痛点越来越明显:成本控制。你写了个聊天机器人,或者搞了个自动摘要工具&#x…...
未来是神经-符号的:AI 推理是如何演变的
原文:towardsdatascience.com/the-future-is-neuro-symbolic-how-ai-reasoning-is-evolving-143ce6485b4f 人工智能软件被用于增强本文文本的语法、流畅性和可读性。 一个名为AlphaGeometry的显著新 AI 系统最近解决了大多数人类都难以解决的困难高中水平数学问题。…...
如何快速下载并配置 Taotoken CLI 实现多模型一键接入
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何快速下载并配置 Taotoken CLI 实现多模型一键接入 对于需要统一团队开发环境的开发者而言,手动为每个工具配置 API…...
Beige CSS框架:现代CSS Grid与变量驱动的极简前端开发实践
1. 项目概述:一个被低估的现代CSS框架如果你和我一样,在过去的几年里,已经厌倦了Bootstrap、Tailwind CSS这些“巨无霸”框架带来的审美疲劳和项目同质化,同时又对从零开始手写CSS的繁琐感到头疼,那么今天聊的这个项目…...
GraphRAG 深度解析:把知识图谱接进检索链路,多跳推理准确率从 50% 提到 85%
很多同学搭完向量 RAG 之后,调了无数遍 Chunk 大小、换了好几个 Embedding 模型,多跳推理准确率就是卡在 50% 左右,怎么都上不去。比如「A 公司 CTO 和 B 公司 CEO 到底有什么合作关系」这类问题,答案散落在三个文档里,…...
别再只会用Matplotlib画基础热力图了!这5个高级定制技巧让你的图表瞬间专业
解锁Matplotlib热力图的5个高阶美学密码:从基础图表到专业可视化 当你第一次用Matplotlib画出热力图时,那种成就感就像解开了数据分析的第一道密码。但随着项目复杂度的提升,那些默认参数生成的图表开始显得单薄——颜色映射不够精准、标注信…...
如何让GPT-3开口说话?揭秘微调技巧,打造你的专属AI模型!
本文详细介绍了微调技术在AI模型中的应用,通过将通用模型如GPT-3进行微调,可以使其适应特定任务,如ChatGPT或GitHub Copilot。微调与普通提示词工程最大的区别在于,它能真正让模型学会数据,而非仅仅是“看到”数据。文…...
2026厦门国际智能交通运输产业博览会开幕:海外需求与国内先进技术的双向奔赴
2026年5月13日,为期三天的2026厦门国际智能交通运输产业博览会(CITSE 2026,以下简称“智交会”)隆重开幕。本届智交会由中国智能交通协会联合厦门会展集团股份有限公司共同举办,以“聚焦产业创新变革,赋能出…...
Intel Lunar Lake核显架构解析:Xe2-LPG如何重塑轻薄本图形性能
1. 项目概述:一次架构驱动的核显革命最近,Intel Lunar Lake(月亮湖)移动处理器的核显性能数据开始陆续曝光,行业内讨论的热度很高。作为一个长期关注移动平台图形性能的从业者,我第一时间梳理了目前能获取到…...
