易语言鼠标轨迹算法(游戏防检测算法)

一.简介

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

鼠标轨迹算法的底层实现采用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:		卡密
* 	[in] pOnnxFilePath:设置 onnx 模型文件路径,如果设置为 NULL,默认和 DLL文件同级目录
* 	[out] pResult:		返回错误信息,参数pResult.code(错误码)如果为 0 表示成功,否则表示错误号;
*
* 返回值:成功返回句柄,失败返回NULL
*
*/
HANDLE WINAPI apiSNCreateHandle(char* szKey, char* pOnnxFilePath, SN_RESULT* pResult);
 
 
 
/*获取鼠标移动轨迹
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateHandle得到)
* 	[in] startPoint:	开始坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
* 	[in] endPoint:		结束坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
*  	[in] type:			轨迹类型(0代表绝对坐标,1代表相对坐标)
* 	[out] points:		轨迹数组,如果数组中元素 point 出现(10000,10000),表示鼠标轨迹结束
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/
int WINAPI apiSNMouseMove(HANDLE handle, SN_POINT *startPoint, SN_POINT *endPoint, int type, SN_POINT_PARAMS* points);
 
 
/*获取版本号
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateHandle得到)
* 	[out] szVersion:	版本号
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/
int WINAPI apiSNGetVersion(HANDLE handle, char* szVersion);
 
 
/*获取错误信息
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateHandle得到)
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/
int WINAPI apiSNGetError(HANDLE handle);
 
 
 
/*释放句柄(内存)
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateHandle得到)
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/
int 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 - 以实际屏幕为准)
.局部变量 type, 整数型, , , 轨迹类型,0 为绝对坐标 ,1为相对坐标
.局部变量 points, SN_POINT_PARAMS, , "3000", 轨迹数组,如果数组中元素 point 出现(10000,10000),表示鼠标轨迹结束
.局部变量 index, 整数型

' ---------------------------------------------------------------
' 1.创建句柄
' 其中卡密 SNKJ5RC8rvSVzAF96CZpx7HBbx28P9dZUgnuYVNHCsWx 仅用于测试,需要找开发人员重新购买,购买卡密连接:https://shop.4yuns.com/links/7C9F16B7
' ---------------------------------------------------------------
handle = apiSNCreateHandle (“SNKJ5RC8rvSVzAF96CZpx7HBbx28P9dZUgnuYVNHCsWx”, “SNTrack.onnx”, pResult)
调试输出 (pResult.code, 到文本 (pResult.message))
调试输出 (“句柄”, handle)
.如果真 (pResult.code < 0)
    调试输出 (“-----------程序结束-----------”)
    返回 ()

.如果真结束
' 开始坐标
startPoint.x = 10
startPoint.y = 10
' 结束坐标
endPoint.x = 100
endPoint.y = 100
' 轨迹类型,0 为绝对坐标 ,1为相对坐标
type = 0

调试输出 (“预备定义数组数量”, 取数组成员数 (points))
' ---------------------------------------------------------------
' 2.获取鼠标轨迹
' ---------------------------------------------------------------
apiSNMouseMove (handle, startPoint, endPoint, type, points)


调试输出 (取变量地址 (startPoint.x), 取变量地址 (startPoint.y))
.计次循环首 (取数组成员数 (points), index)
    .如果真 (points [index].point.x = 10000 且 points [index].point.y = 10000)
        删除成员 (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句柄,这样才能多个线程互不影响

3.如何判断轨迹结束

可以通过循环判断得到的轨迹坐标,如果当前坐标的X值和Y值都是1000的情况下,默认轨迹结束

(之前的判断是(-1,-1)作为轨迹结束的标记,现在修改为(1000,1000)作为轨迹结束标记,目的是为了兼容相对坐标)

六.更新日志

  • 2024.02.06 c++ 模拟人工鼠标轨迹demo
  • 2024.06.06 python 模拟人工鼠标轨迹demo
  • 2024.06.25 新增错误日志信息
  • 2024.07.15 优化水平/垂直轨迹
  • 2024.08.20 优化部分轨迹可能出现负数的问题
  • 2024.09.19 优化部分轨迹延迟时间为0的情况(可能会造成鼠标瞬移)
  • 2024.09.21 修复部分水平/垂直轨迹出现负数的情况
  • 2024.09.28 新增易语言demo
  • 2024.11.01 修改接口,兼容易语言代码
  • 2024.11.17 支持移动轨迹为相对坐标(默认是轨迹是绝对坐标)

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

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

相关文章

Three.js材质纹理扩散过渡

Three.js材质纹理扩散过渡 import * as THREE from "three"; import { ThreeHelper } from "/src/ThreeHelper"; import { LoadGLTF, MethodBaseSceneSet } from "/src/ThreeHelper/decorators"; import { MainScreen } from "/src/compone…

apache-tomcat-6.0.44.exe Win10

apache-tomcat-6.0.44.exe Win10

赫布定律 | 机器学习 / 反向传播 / 经验 / 习惯

注&#xff1a;本文为 “赫布定律” 相关文章合辑。 未整理。 赫布定律 Hebb‘s law 馥墨轩 2021 年 03 月 13 日 00:03 1 赫布集合的基本定义 唐纳德・赫布&#xff08;Donald Hebb&#xff09;在 1949 年出版了《行为的组织》&#xff08;The Organization of Behavior&a…

uni-app实现小程序、H5图片轮播预览、双指缩放、双击放大、单击还原、滑动切换功能

前言 这次的标题有点长&#xff0c;主要是想要表述的功能点有点多&#xff1b; 简单做一下需求描述 产品要求在商品详情页的头部轮播图部分&#xff0c;可以单击预览大图&#xff0c;同时在预览界面可以双指放大缩小图片并且可以移动查看图片&#xff0c;双击放大&#xff0…

杭州乘云联合信通院发布《云计算智能化可观测性能力成熟度模型》

原文地址&#xff1a;杭州乘云联合中国信通院等单位正式发布《云计算智能化可观测性能力成熟度模型》标准 2024年12月3日&#xff0c;由全球数字经济大会组委会主办、中国信通院承办的 2024全球数字经济大会 云AI计算创新发展大会&#xff08;2024 Cloud AI Compute Ignite&…

第6章图6.21-6.27-《分析模式》原图和UML图对比

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集

如何在谷歌浏览器中设置广告屏蔽

在数字时代&#xff0c;网络广告无处不在&#xff0c;虽然它们为网站提供了收入来源&#xff0c;但有时也会干扰我们的浏览体验。如果你正在寻找一种方法来减少这些干扰&#xff0c;那么在谷歌浏览器中设置广告屏蔽是一个不错的选择。本文将指导你完成这一过程&#xff0c;并简…

认识网络互联设备(二)

交换机 功能&#xff1a; &#xff08;1&#xff09;通过支持并行通信&#xff0c;提高交换机的信息吞吐量&#xff1b; &#xff08;2&#xff09;将传统的一个大局域网上的用户分若干工作组&#xff0c;每个端口连接一台设备或者连接一个工作组&#xff0c;有效的解决了拥塞情…

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果&#xff08;网页显示&#…

AMBA-CHI协议详解(十二)

AMBA-CHI协议详解&#xff08;一&#xff09;- Introduction AMBA-CHI协议详解&#xff08;二&#xff09;- Channel fields / Read transactions AMBA-CHI协议详解&#xff08;三&#xff09;- Write transactions AMBA-CHI协议详解&#xff08;四&#xff09;- Other transac…

【MATLAB第109期】基于MATLAB的带置信区间的RSA区域敏感性分析方法,无目标函数

【MATLAB第108期】基于MATLAB的带置信区间的RSA区域敏感性分析方法&#xff0c;无目标函数 参考第64期文章【MATLAB第64期】【保姆级教程】基于MATLAB的SOBOL全局敏感性分析模型运用&#xff08;含无目标函数&#xff0c;考虑代理模型&#xff09; 创新点&#xff1a; 1、采…

《外国服务区加油站模型:功能与美观的完美结合 caotu66.com》

这个外国服务区加油站模型在设计上独具特色&#xff0c;兼具实用性和美观性。 从整体布局来看&#xff0c;加油站位于服务区的显眼位置。加油站的顶棚采用了现代风格的设计&#xff0c;顶棚的颜色主要是黄色和蓝色&#xff0c;色彩鲜明且具有辨识度。顶棚下方有多个加油柱&…

mybatis-plus超详细讲解

mybatis-plus &#xff08;简化代码神器&#xff09; 地址&#xff1a;https://mp.baomidou.com/ 目录 mybatis-plus 简介 特性 支持数据库 参与贡献 快速指南 1、创建数据库 mybatis_plus 2、导入相关的依赖 3、创建对应的文件夹 4、编写配置文件 5、编写代码 …

数据结构(顺序表)JAVA方法的介绍

前言 在 Java 中&#xff0c;集合类&#xff08;Collections&#xff09;是构建高效程序的核心组件之一&#xff0c;而 List 接口作为集合框架中的重要一员&#xff0c;是一个有序、可重复的元素集合。与 Set 接口不同&#xff0c;List 保证了元素的顺序性&#xff0c;并允许存…

泊松编辑 possion editing图像合成笔记

开源地址&#xff1a; GitHub - kono-dada/Reproduction-of-possion-image-editing 掩码必须是矩形框

【Flink-scala】DataStream编程模型之状态编程

DataStream编程模型之状态编程 参考&#xff1a; 1.【Flink-Scala】DataStream编程模型之数据源、数据转换、数据输出 2.【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 3.【Flink-scala】DataStream编程模型之窗口计算-触发器-驱逐器 4.【Flink-scal…

Linux实操篇-远程登录/Vim/开机重启

目录 传送门前言一、远程登录1、概念2、ifconfig3、实战3.1、SSH&#xff08;Secure Shell&#xff09;3.2、VNC&#xff08;Virtual Network Computing&#xff09;3.3、RDP&#xff08;Remote Desktop Protocol&#xff09;3.4、Telnet&#xff08;不推荐&#xff09;3.5、FT…

【计算机网络】期末考试预习复习|上

作业讲解 物理层作业 共有4个用户进行CDMA通信。这4个用户的码片序列为&#xff1a; A: (–1 –1 –1 1 1 –1 1 1)&#xff1b;B: (–1 –1 1 –1 1 1 1 –1) C: (–1 1 –1 1 1 1 –1 –1)&#xff1b;D: (–1 1 –1 –1 –1 –1 1 –1) 现收到码片序列&#xff1a;(–1 1 –…

CTFHub-ssrf

技能树--Web--SSRF 内网访问 开启题目 尝试访问位于127.0.0.1的flag.php吧 进入环境 根据提示输入即可 127.0.0.1/flag.php 伪协议读取文件 开启题目 尝试去读取一下Web目录下的flag.php吧 进入环境&#xff0c;根据提示输入 file:///var/www/html/flag.php 鼠标右键查看…

解决PyTorch模型推理时显存占用问题的策略与优化

在将深度学习模型部署到生产环境时&#xff0c;显存占用逐渐增大是一个常见问题。这不仅可能导致性能下降&#xff0c;还可能引发内存溢出错误&#xff0c;从而影响服务的稳定性和可用性。本文旨在探讨这一问题的成因&#xff0c;并提供一系列解决方案和优化策略&#xff0c;以…