易语言模拟真人动态生成鼠标滑动路径

一.简介

鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。

鼠标轨迹算法的底层实现采用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 = 10
 
endPoint.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux:防火墙和selinux对服务的影响

1-1selinux 1-1 SELinux是对程序、文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序&#xff0c;因此刚好也 是能够控制网络服务能否访问系统资源的一道关卡。 1-2 SELinux是通过MAC的方式来控制管理进程&#xff0c;它控制的主体是进程&#xff0c;而目标则是…

华为eNSP:QinQ

一、什么是QinQ&#xff1f; QinQ是一种网络技术&#xff0c;全称为"Quantum Insertion"&#xff0c;也被称为"Q-in-Q"、"Double Tagging"或"VLAN stacking"。它是一种在现有的VLAN&#xff08;Virtual Local Area Network&#xff0…

运动控制 PID算法

文章目录 一、自动控制简介1.1 开环控制系统1.2 闭环控制系统1.3 电机速度闭环控制系统 二、PID算法2.1 比例2.1.1 静态误差 2.2 积分2.3 微分环节2.4 位置式PID2.5 增量式PID 一、自动控制简介 自动控制系统是使用自动控制装置对关键控制参数进行自动控制&#xff0c;使它在收…

Pytorch实现transformer语言模型

转载自&#xff1a;| 03_language_model/02_Transformer语言模型.ipynb | 从头训练Transformer语言模型 |Open In Colab | Transformer语言模型 本节训练一个 sequence-to-sequence 模型&#xff0c;使用pytorch的 nn.Transformer <https://pytorch.org/docs/master/nn.ht…

C语言例题练手(1)

前几篇博客的内容已经涉及了C语言的部分语法知识&#xff0c;我们可以尝试做一些编程题&#xff0c;或者换一种说法就是可以写出什么样的程序以此来解决一些问题。 题目来自牛客网https://www.nowcoder.com和C语言菜鸟教程C 语言教程 | 菜鸟教程 数值计算 【例1】带余除法计…

Spring AI 核心概念

SpringAI 核心概念 1. Models2. Prompts3. Prompt Templates4. Embeddings5. Tokens6. Structured Output7. Bringing Your Data & APIs to the AI Model7.1 Retrieval Augmented Generation7.2 Function Calling 1. Models AI 模型是用于处理和生成信息的算法&#xff0c…

http请求响应详解

http介绍 http协议&#xff1a; Http”协议称为是“超文本传输协议”&#xff08;HTTP-Hypertext transfer protocol&#xff09;。它定义了浏览器怎么向万维网服务器请求万维网文档&#xff0c;以及服务器怎么样把文档传送给浏览器。 https协议&#xff1a; 传统的HTTP协议…

直播系统搭建教程安装说明

需要安装的软件(宝塔【软件商店】中查找安装): 1.PHP7.0 ~ PHP7.3 需要安装的扩展:(宝塔【PHP管理】【安装扩展】中安装) *PDO PHP Extension * MBstring PHP Extension * CURL PHP Extension * Mylsqi PHP Extension * Redis PHP Extension * fileinfo PHP Extension …

redis7学习笔记

文章目录 1. 简介1.1 功能介绍1.1.1 分布式缓存1.1.2 内存存储和持久化(RDBAOF)1.1.3 高可用架构搭配1.1.4 缓存穿透、击穿、雪崩1.1.5 分布式锁1.1.6 队列 1.2 数据类型StringListHashSetZSetGEOHyperLogLogBitmapBitfieldStream 2. 命令2.1 通用命令copydeldumpexistsexpire …

51c~C语言~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12428240 一、C语言和C的区别 ​ C语言虽说经常和C在一起被大家提起&#xff0c;但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准&#xff0c;C是C99标准的。C89就是在1989年制定的标准&#xff0c;如今最新…

【论文解读】EdgeYOLO:一种边缘实时目标检测器(附论文地址)

论文地址&#xff1a;https://arxiv.org/pdf/2302.07483 这篇文章的标题是《EdgeYOLO: An Edge-Real-Time Object Detector》&#xff0c;由中国北京理工大学的Shihan Liu、Junlin Zha、Jian Sun、Zhuo Li和Gang Wang共同撰写。这篇论文提出了一个基于最新YOLO框架的高效、低复…

基于SSM的企业管理系统(源码+lw+调试+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【MyBatis源码】CacheKey缓存键的原理分析

文章目录 Mybatis缓存设计缓存KEY的设计CacheKey类主体CacheKey组成CacheKey如何保证缓存key的唯一性 Mybatis缓存设计 MyBatis 每秒过滤众多数据库查询操作&#xff0c;这对 MyBatis 缓存键的设计提出了很高的要求。MyBatis缓存键要满足以下几点。 无碰撞&#xff1a;必须保证…

Mac M1 Docker创建Rocketmq集群并接入Springboot项目

文章目录 前言Docker创建rocketmq集群创建rocketmq目录创建docker-compose.yml新增broker.conf文件启动容器 Springboot 接入 rocketmq配置maven依赖修改appplication.yml新增消息生产者新增消费者测试发送消息 总结 前言 最近公司给配置了一台mac&#xff0c;正好有时间给装一…

pycharm小游戏贪吃蛇及pygame模块学习()

由于代码量大&#xff0c;会逐渐发布 一.pycharm学习 在PyCharm中使用Pygame插入音乐和图片时&#xff0c;有以下这些注意事项&#xff1a; 插入音乐&#xff1a; - 文件格式支持&#xff1a;Pygame常用的音乐格式如MP3、OGG等&#xff0c;但MP3可能需额外安装库&#xf…

使用Rust实现http/https正向代理

相关库的安装 利用vcpkg安装openssl库 vcpkg install openssl:x64-windows并设置openssl库位置的环境变量 $Env:OPENSSL_DIR"D:/vcpkg/packages/openssl_x64-windows/"安装openssl软件&#xff0c;因为需要利用openssl生成自签名证书 Cargo依赖 [dependencies] …

基于MATLAB的运动车辆跟踪检测系统

一、课题介绍 本设计为基于MATLAB的运动车辆跟踪检测系统。带有一个GUI界面&#xff0c;可以读取高速路车流视频&#xff0c;读取视频信息&#xff0c;并且统计每辆车经过左车道还是右车道&#xff0c;车速和平均速度检测&#xff0c;以及某一帧下的车流密度&#xff0c;以及最…

微深节能 环形运动机械定位控制系统 格雷母线

微深节能的环形运动机械定位控制系统中的格雷母线是一种高精度、无磨损的非接触式位置检测系统&#xff0c;特别适用于环形运动机械的定位控制。该系统主要由格雷母线、天线箱、电气柜等关键部件组成&#xff0c;其核心在于格雷母线这一特殊的编码线。 格雷母线的工作原理是通过…

【359】基于springboot的智慧草莓基地管理系统

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本智慧草莓基地管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?

以下是使用 Python 的爬虫技术获取淘宝天猫商品价格信息的两种常见方法&#xff1a; 方法一&#xff1a;使用 Selenium 一、环境准备&#xff1a; 安装 selenium 库&#xff1a;在命令行中运行 pip install selenium。下载浏览器驱动&#xff1a;如 ChromeDriver&#xff08;确…