c++模拟真人鼠标轨迹算法
一.鼠标轨迹算法简介
鼠标轨迹底层实现采用 C / C++语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。
通过 DLL 封装,开发者可以在 C++、Python、易语言、按键精灵等多种编程语言中使用鼠标轨迹模拟技术。这种封装方式提供了一种简便的接口,使得不同背景的开发者都能够轻松集成和使用这一技术。
二.鼠标轨迹算法支持多种编程语言
目前 Demo支持的编程语言有 C 语言、C++、Python , 易语言、按键精灵等多种编程语言对接还在开发中,当然如果有开发者愿意对接提供 demo,将不胜感激(可以提供报酬)
三.鼠标轨迹算法优势
- 1.模拟人工轨迹(非贝塞尔,一般也画不出来圆滑的贝塞尔曲线)
- 2.适当的停顿/加速/减速
- 3.随机轨迹(固定两个点,每次调用接口可获得不同的随机轨迹)
四.鼠标轨迹算法应用场景
某些软件或游戏可能通过检测异常的鼠标操作来防止作弊,以下为常用场景
- 1.游戏自动化脚本
- 2.滑块拖动轨迹
五.C/C++ 接口调用演示代码
1.头文件
/******************************************************************************************/@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: 卡密(购买卡密:https://shop.4yuns.com/links/7C9F16B7)
* [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.cpp文件
/****************************************************************************************/@SDK功能描述:鼠标轨迹
/******************************************************************************************/
//#include <iostream>
#include "include/SNSDK.h"
#pragma comment(lib,"./dll/x86/SNSDK.lib")int main()
{SN_RESULT pResult = { 0 };char* pKey = (char*)"SNKJaURwbfuhcaQaCMJVhdByPZMVsZdqRUMjfWrxY1A5";//1.创建句柄HANDLE pHandle = apiSNCreateHandle(pKey,&pResult);if (!pHandle){printf("error code:%d message:%s \n",pResult.code,pResult.message);return -__LINE__;}//2.获取轨迹SN_POINT startPoint = { 100,100 }; //开始坐标SN_POINT endPoint = { 800,800 }; //结束坐标SN_POINT_PARAMS track[4096] = { 0 };//轨迹pResult = apiSNMouseMove(pHandle, startPoint, endPoint, track);if (pResult.code != 0){printf("error code:%d message:%s \n", pResult.code, pResult.message);return -__LINE__;}//3.鼠标根据轨迹移动,轨迹最后一个点(-1,-1)for (int i = 0; i < 4096; i++){struct SN_POINT point = track[i].point;if (point.x <= 0 && point.y <= 0)//轨迹最后一个点(-1,-1)break;printf("x:%d y:%d delay_time:%d \n", point.x, point.y, track[i].delayTime);}//4.释放内存pResult = apiSNDestroyHandle(pHandle);return 1;
}/*
x:100 y:100 delay_time:0
x:100 y:98 delay_time:10
x:103 y:98 delay_time:15
x:111 y:98 delay_time:16
x:116 y:101 delay_time:15
x:122 y:104 delay_time:2
x:129 y:107 delay_time:13
x:135 y:109 delay_time:2
x:144 y:112 delay_time:14
x:155 y:117 delay_time:2
x:167 y:123 delay_time:14
x:180 y:128 delay_time:2
x:193 y:134 delay_time:13
x:209 y:138 delay_time:2
x:225 y:144 delay_time:13
x:238 y:149 delay_time:5
x:254 y:157 delay_time:10
x:269 y:162 delay_time:5
x:282 y:168 delay_time:11
x:298 y:175 delay_time:5
x:311 y:180 delay_time:10
x:326 y:185 delay_time:6
x:341 y:193 delay_time:9
x:369 y:211 delay_time:15
x:396 y:231 delay_time:16
x:419 y:251 delay_time:16
x:442 y:270 delay_time:16
x:461 y:285 delay_time:17
x:481 y:300 delay_time:15
x:491 y:311 delay_time:15
x:502 y:319 delay_time:2
x:513 y:329 delay_time:14
x:523 y:343 delay_time:2
x:535 y:355 delay_time:14
x:546 y:369 delay_time:0
x:558 y:383 delay_time:15
x:570 y:397 delay_time:2
x:582 y:411 delay_time:13
x:596 y:427 delay_time:2
x:608 y:443 delay_time:14
x:620 y:459 delay_time:5
x:633 y:476 delay_time:10
x:645 y:490 delay_time:5
x:656 y:503 delay_time:11
x:666 y:515 delay_time:5
x:675 y:527 delay_time:11
x:684 y:538 delay_time:5
x:694 y:551 delay_time:11
x:702 y:565 delay_time:5
x:710 y:577 delay_time:11
x:716 y:588 delay_time:5
x:723 y:598 delay_time:11
x:728 y:606 delay_time:5
x:733 y:615 delay_time:11
x:738 y:622 delay_time:5
x:743 y:631 delay_time:11
x:747 y:637 delay_time:5
x:750 y:644 delay_time:11
x:753 y:652 delay_time:5
x:756 y:659 delay_time:10
x:759 y:666 delay_time:5
x:761 y:673 delay_time:11
x:764 y:680 delay_time:5
x:766 y:687 delay_time:11
x:768 y:694 delay_time:5
x:769 y:701 delay_time:10
x:771 y:708 delay_time:5
x:772 y:714 delay_time:11
x:773 y:722 delay_time:5
x:774 y:729 delay_time:10
x:777 y:743 delay_time:16
x:778 y:755 delay_time:15
x:778 y:764 delay_time:16
x:780 y:775 delay_time:16
x:781 y:784 delay_time:16
x:781 y:785 delay_time:15
x:781 y:789 delay_time:2
x:781 y:790 delay_time:13
x:781 y:792 delay_time:2
x:782 y:796 delay_time:14
x:782 y:796 delay_time:2
x:782 y:797 delay_time:14
x:782 y:798 delay_time:15
x:782 y:800 delay_time:311
x:784 y:800 delay_time:16
x:784 y:800 delay_time:5
x:785 y:800 delay_time:10
x:786 y:800 delay_time:5
x:786 y:800 delay_time:11
x:788 y:800 delay_time:6
x:789 y:800 delay_time:9
x:790 y:800 delay_time:5
x:791 y:800 delay_time:10
x:793 y:800 delay_time:16
x:795 y:800 delay_time:16
x:796 y:800 delay_time:15
x:797 y:800 delay_time:15
x:797 y:800 delay_time:2
x:798 y:800 delay_time:15
x:798 y:800 delay_time:30
x:799 y:800 delay_time:15
x:799 y:800 delay_time:15
*/
六.效果演示

七.鼠标轨迹 Demo 下载
百度云盘下载
夸克云盘下载
123云盘下载
相关文章:
c++模拟真人鼠标轨迹算法
一.鼠标轨迹算法简介 鼠标轨迹底层实现采用 C / C语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼…...
android12/13/14版本wms最新面试题:dumpsys window和sf一定会一致么?
背景: 近期学员们学习了马哥wms课程后,去参加相关的大厂的framework面试,有一个学员朋友带回来了一个wms相关的面试题,具体面试题描述如下: 问题1 请问wms的window和SurfaceFlinger的Layer有什么关系? 回…...
Python脚本示例,你可以使用这个脚本来自动化登录网站、选择页面元素和提交表单
devtools 元素页面可以选择元素,copy xpath用于查找 python编程:1、浏览器登录https://58.xxx/ 账号:xxx 密码:FN123456 2、选择“技能训练” 3、选择“云网智能运维员培训相关资料” 4、选择“L1-Linux操作系统与运维题库” 5、依次选择1-50题目&#x…...
安卓13设置动态修改设置显示版本号 版本号增加信息显示 android13增加序列号
总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 设置 =》关于平板电脑 =》版本号 在这里显示了系统的一些信息,但是这里面的信息并不包含序列号之类的信息,我们修改下系统设置,在这里增加上相关的序列号。 2.问题分析…...
从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之三:在目标服务器上恢复数据
从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之三:在目标服务器上恢复数据 目录 从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之三:在目标服务器上恢复数据一、修改参数文件的内容二、…...
相互作用感知的 3D 分子生成 VAE 模型 - DeepICL 评测
DeepICL 是一个基于相互作用感知的 3D 分子生成模型,能够在目标结合口袋内进行相互作用引导的小分子设计。DeepICL 通过利用蛋白质-配体相互作用的普遍模式作为先验知识,在有限的实验数据下也能实现高度的泛化能力。 一、背景介绍 DeepICL 来源于韩国科学…...
Java实现随机抽奖的方法有哪些
在Java中实现随机抽奖的方法,通常我们会使用java.util.Random类来生成随机数,然后基于这些随机数来选择中奖者。以下将给出几种常见的随机抽奖实现方式,包括从数组中抽取、从列表中抽取以及基于权重的抽奖方式。 1. 从数组中抽取 import ja…...
grafana加载缓慢解决方案
背景 目前随着数据和图表的逐渐增多,Grafana 页面加载速度明显变慢,严重影响了用户体验,几次都有骂娘的冲动.,因此我们需要对 Grafana 进行优化,以提升加载性能。 对于速度优化,我们可以从以下方面进行入…...
【湖南步联科技身份证】 身份证读取与酒店收银系统源码整合———未来之窗行业应用跨平台架构
一、html5 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><script type"text/javascript" src"http://51.onelink.ynwlzc.net/o2o/tpl/Merchant/static/js…...
多路复用和事件轮询机制
多路复用:Nio 服务端只有一个线程处理多个连接 事件轮询机制:select 底层用了 epoll。 select open 调用了 epoll 通过3个方法来实现事件轮询 1.epoll.create 创建epoll 多个集合 2.epoll.ctl 如果有事件会把事件挪到就绪事件列表。 3.epoll.wait 会监听…...
Android常用C++特性之std::abs
声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。 std::abs 是 C 标准库中的一个函数,用于计算整数、浮点数或其他数值类型的绝对值。它返回一个值,该值是参数的非负数形式,即去掉负…...
LabVIEW提高开发效率技巧----使用状态机架构
状态机架构(State Machine Architecture)是LabVIEW编程中的一种常见且高效的设计模式,特别适合用于处理具有多个操作状态的复杂系统。通过这种架构,程序能够根据不同的输入条件或事件,在多个状态之间切换,从…...
Feign:服务挂了也不会走fallback
Feign 本质上是一个 HTTP 客户端,用于简化微服务之间的 HTTP 通信。它允许开发者通过定义接口和注解来声明式地编写 HTTP 客户端,而无需手动编写 HTTP 请求和响应处理的代码。 今天在模拟微服务A feign调用微服务B的时候,把微服务B关了&#…...
网络编程操作—函数
一、socket创建套接字 #include <sys/types.h> //头文件 #include <sys/socket.h> int socket(int domain, int type, int protocol); 三个参数:domain、type、protocol 1.domain:域名,领域,定义域(中文解释&…...
博客摘录「 GD32的flash读、擦除、写操作」2024年9月2日
关于GD32的Flash读、擦除、写操作,以下是基于当前可获得信息(截至2024年9月2日)的详细解答: 一、GD32 Flash的基本特性 存储空间:GD32的Flash存储空间大小因型号而异,可支持从几KB到几MB不等的存储容量。页大小:Flash按页组织,不同型号的GD32其页大小可能不同。例如,…...
【性能优化】低配starRocks常驻内存优化
背景说明 由于服务器的实际资源小于starRocks官方的配置,导致starRocks在无任务的情况下,常驻内存偏高,可用于查询的资源变小。 官方文档 实际部署的集群一般是4C8G和8C16G,be的配置不达标 为了解决单次查询内存不足的问题&…...
科研绘图系列:R语言树结构聚类热图(cluster heatmap)
文章目录 介绍加载R包导入数据数据预处理画图修改图形导出数据系统信息介绍 热图结合树结构展示聚类结果通常用于展示数据集中的模式和关系,这种图形被称为聚类热图或层次聚类热图。在这种图中,热图部分显示了数据矩阵的颜色编码值,而树结构(通常称为树状图或聚类树)则显…...
微信小程序操作蓝牙
主要流程: 1.初始化蓝牙适配器openBluetoothAdapter,如果不成功就onBluetoothAdapterStateChange监听蓝牙适配器状态变化事件 2.startBluetoothDevicesDiscovery开始搜寻附近的蓝牙外围设备 3.onBluetoothDeviceFound监听寻找到新设备的事件,…...
Python爱心射线(完整代码)
目录 系列目录 写在前面 完整代码 下载代码 代码分析 写在后面 系列目录 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3...
努比亚 Z17 NX563J Root 教程三方REC刷写工具教程
教程:1,自用成功 正常链接列表 adb devices 检查fastboot链接列表 fastboot devices 解锁设备fastboot oem nubia_unlock NUBIA_NX563J 我用的解锁设备是:fastboot flashing unlock 1.打开开发者选项。将OEM解锁的按钮打开 2.下载附件努…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
