当前位置: 首页 > news >正文

C++ 模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介

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

鼠标轨迹算法的底层实现采用C/C++语言,原因在于C/C++提供了高性能的执行能力和直接访问操作系统底层资源的能力。

鼠标轨迹算法具有以下优势:

  • 模拟人工轨迹:算法能够模拟出非贝塞尔曲线的自然鼠标移动,避免了机械式的直线移动。
  • 适当的停顿/加速/减速:算法能够根据需要模拟出鼠标的停顿、加速和减速,使得轨迹更加真实。
  • 随机轨迹:在固定两点间,算法能够生成不同的随机轨迹,增加了轨迹的不可预测性。

二.应用场景

  • 游戏鼠标轨迹检测(检测能过无畏fps类型、传奇、梦幻等游戏,已经在游戏中验证)
  • 滑块拖动验证
  • 部分网页鼠标轨迹检测

三.支持多种编程语言

1.C++头文件

/******************************************************************************************/@SDK功能描述:C++鼠标轨迹/******************************************************************************************/#ifndef _SN_SDK_H__
#define _SN_SDK_H__#include <windows.h>enum SN_TRACK_MOVE_TYPE
{TRACK_MOVE_TYPE_NORMAL=0,		// 用于常规轨迹 - 普通游戏鼠标轨迹TRACK_MOVE_TYPE_SLIDER,			// 用于滑块轨迹,比常规常规轨迹密度更大 - 滑块验证轨迹
};enum SN_TRACK_POINT_TYPE
{TRACK_POINT_TYPE_NORMAL=0,		// 默认绝对坐标TRACK_POINT_TYPE_RELATIVE,		// 相对坐标
};//返回参数
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)
* 	[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] density:		轨迹密度调节 ,必须大于或者等于 1,默认 5,举个例子:假如轨迹有 100 个点,累计耗时 1000 毫秒,设置 density 如下:
*								-  density = 1  时,轨迹有 100/1=100 个点,整个轨迹累计耗时 1000/1=1000 毫秒 (默认 1  倍速度)
*								-  density = 2  时,轨迹有 100/2=50  个点,整个轨迹累计耗时 1000/2=500  豪秒 (等价 2  倍速度)
*								-  density = 3  时,轨迹有 100/3=33  个点,整个轨迹累计耗时 1000/3=333  豪秒 (等价 3  倍速度)
*								-  density = 5  时,轨迹有 100/5=20  个点,整个轨迹累计耗时 1000/5=200  豪秒 (等价 5  倍速度)
*								-  density = 20 时,轨迹有 100/20=5  个点,整个轨迹累计耗时 1000/20=50  豪秒 (等价 20 倍速度)
*								
*  	[in] type:			轨迹类型(0代表绝对普通轨迹,1代表滑块轨迹(获得的轨迹点数比普通轨迹点数更多),具体参考enum SN_TRACK_MOVE_TYPE)
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/
int WINAPI apiSNSetTrackParams(HANDLE handle, int density=5, int type=0);/*获取鼠标移动轨迹
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateHandle得到)
* 	[in] startPoint:	开始坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
* 	[in] endPoint:		结束坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
*  	[in] type:			轨迹坐标类型(0代表绝对坐标,1代表相对坐标,具体参考enum SN_TRACK_POINT_TYPE)
* 	[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得到)
* 	[out] pResult:		返回错误信息,参数pResult->code(错误码)如果为 0 表示成功,否则表示错误号;
*
* 返回值:返回卡密到期时间,失败返回NULL,错误信息请查看参数 pResult->message
*
*/
char* WINAPI apiSNGetKeyExpiresTime(HANDLE handle, SN_RESULT* pResult);/*获取错误信息
*
* 参数:
*	[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接口

/****************************************************************************************/@SDK功能描述:鼠标轨迹
/******************************************************************************************/
//#include <iostream>
#include "include/SNSDK.h"#ifdef SDK_X86
#pragma comment(lib,"./dll/x86/SNSDK.lib")
#else
#pragma comment(lib,"./dll/x64/SNSDK.lib")
#endifint main()
{SN_RESULT pResult = { 0 };char* pKey = (char*)"SNKJ86RYDBY1YxafpLG3ep1R6NHFYLjz2UFFcE8Lx9Tq";//1.创建句柄HANDLE pHandle = apiSNCreateHandle(pKey,NULL, &pResult);if (!pHandle){printf("error code:%d message:%s \n", pResult.code, pResult.message);return -__LINE__;}//获取卡密到期时间char* pTime = apiSNGetKeyExpiresTime(pHandle, &pResult);if (pTime)printf("卡密到期时间:%s \n", pTime);//设置轨迹参数,默认5倍速,根据自身需求设置// 轨迹密度density调节 ,density必须大于或者等于 1,默认 5,举个例子:假如轨迹有100个点,耗时1000毫秒,设置 density 如下://		density = 1  时,轨迹有 100/1=100 个点,整个轨迹累计耗时 1000/1=1000 毫秒 (默认 1  倍速度)//		density = 2  时,轨迹有 100/2=50  个点,整个轨迹累计耗时 1000/2=500  豪秒 (等价 2  倍速度)//		density = 3  时,轨迹有 100/3=33  个点,整个轨迹累计耗时 1000/3=333  豪秒 (等价 3  倍速度)//		density = 5  时,轨迹有 100/5=20  个点,整个轨迹累计耗时 1000/5=200  豪秒 (等价 5  倍速度)//		density = 20 时,轨迹有 100/20=5  个点,整个轨迹累计耗时 1000/20=50  豪秒 (等价 20 倍速度)int ret2 = apiSNSetTrackParams(pHandle, 5, 0);if (ret2 != 0){printf("error code:%d  \n", ret2);return -__LINE__;}//2.获取轨迹SN_POINT startPoint = { 100,100 };  //开始坐标SN_POINT endPoint = { 800,800 };    //结束坐标SN_POINT_PARAMS track[4096] = { 0 };//轨迹//轨迹类型,0 为绝对坐标 ,1为相对坐标int type = 0;int ret = apiSNMouseMove(pHandle, &startPoint, &endPoint, type, track);if (ret != 0){printf("error code:%d message:%s \n", pResult.code, pResult.message);return -__LINE__;}//3.鼠标根据轨迹移动,轨迹最后一个点(10000,10000)for (int i = 0; i < 4096; i++){struct SN_POINT point = track[i].point;if (point.x == 10000 && point.y == 10000)//轨迹最后一个点(10000,10000)break;printf("x:%d y:%d delay_time:%d \n", point.x, point.y, track[i].delayTime);}
#if 0if (type == 1)//如果是相对坐标,验证结果{int endX = startPoint.x;int endY = startPoint.y;for (int i = 0; i < 4096; i++){struct SN_POINT point = track[i].point;if (point.x == 10000 && point.y == 10000)//轨迹最后一个点(10000,10000)break;endX += point.x;endY += point.y;printf("x:%d y:%d delay_time:%d \n", point.x, point.y, track[i].delayTime);}printf("endX:%d endY:%d \n", endX, endY);}
#endif//4.释放内存ret = apiSNDestroyHandle(pHandle);return 1;
}

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)作为轨迹结束的标记,现在修改为(10000,10000)作为轨迹结束标记,目的是为了兼容相对坐标)

4.鼠标轨迹设置相对坐标

在函数 apiSNMouseMove 中 type 参数,0 为 绝对坐标 ; 1 为相对坐标

5.如何调节点的密集程度

在(2024.12.22)SDK2.0版本中新增接口 apiSNSetTrackParams 中的 density 参数可以用来调节轨迹密度,举个例子:

  • density = 1 时,默认轨迹有 100 个点,整个轨迹累计耗时 1000 毫秒 (默认 1 倍速度)
  • density = 2 时,轨迹有 100/2=50 个点,整个轨迹累计耗时 500 毫秒 (等价 2 倍速度)
  • density = 3 时,轨迹有 100/3=33 个点,整个轨迹累计耗时 333 毫秒 (等价 3 倍速度)
  • density = 5 时,轨迹有 100/5=20 个点,整个轨迹累计耗时 200 毫秒 (等价 5 倍速度)

不同的游戏需要的轨迹密度不一样,类似 fps 游戏,鼠标滑动轨迹比较快,density 可以设置为 5 或者更高 ; 类似魔兽世界或者梦幻,density 可以调节为 2 或者 3或者5

6.滑块验证轨迹

在函数 apiSNSetTrackParams 中 type 参数,0 为普通鼠标轨迹 ; 1 为滑块轨迹

普通鼠标贵和滑块轨迹区别:滑块轨迹比普通鼠标轨迹坐标点更多(相同的开始/结束坐标),点与点之间更加密集,轨迹的开始和结束暂停/加速更加明显

六.更新日志

  • 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 支持移动轨迹为相对坐标(默认是轨迹是绝对坐标)
  • 2024.12.15 新增文字识别OCR,支持编程语言如下:
    • Python
    • 易语言
    • C语言
    • C++
  • 2024.12.22 优化鼠标轨迹
    • 新增滑块轨迹
    • 优化鼠标轨迹 - 支持密度调节
  • 2024.12.29
    • 修复鼠标轨迹可能会崩溃的问题
    • 修复OCR文字识别失败问题(带有中文路径的图片)

相关文章:

C++ 模拟真人鼠标轨迹算法 - 防止游戏检测

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

Linux-----线程同步(条件变量)

目录 相关API restrict关键字 线程间条件切换函数 条件变量pthread_cond_t 案例 在前面的锁的基础上进一步提高线程同步效率&#xff0c;也就是两个线程只用锁去执行的话依然会存在资源竞争的情况&#xff0c;也就是抢锁&#xff0c;这里就需要在锁的这边加上限制&#xf…...

58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1

进入靶场 和2次注入的页面很像 不过养成查看源代码的好习惯 先访问source.zip 下载后解压&#xff0c;发现两个文件 第一个文件夹打开又有4个PHP文件 那还是先看index.php文件好了 有PHP和HTML两部分&#xff0c;下面是PHP部分代码&#xff08;HTML太长了&#xff0c;先放一…...

小汽车维修记录程序(PC版)

我需要一个小程序&#xff0c;记录我的小车保养相关的情况&#xff1a;时间&#xff0c;地点&#xff0c;某种零件&#xff0c;以什么价格被保养使用。这样我才能清楚的知道我的小车下一次保养&#xff0c;然后我可以有的放矢的去准备下一次的零件和时间&#xff0c;避免过度保…...

回顾2024年在CSDN的成长

文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN&#xff1a;编程新手的避风港初学者的福音&#xff1a;细致入微的知识讲解考试复习神器&#xff1a;技术总结的“救命指南”曾经的自己&#xff1a;为何迟迟不迈出写博客的第一步兴趣萌芽&#xff1a;从“读”到“想写”的初体验…...

AI编程工具使用技巧——通义灵码

活动介绍通义灵码1. 理解通义灵码的基本概念示例代码生成 2. 使用明确的描述示例代码生成 3. 巧妙使用注释示例代码生成 4. 注意迭代与反馈原始代码反馈后生成优化代码 5. 结合生成的代码进行调试示例测试代码 其他功能定期优化生成的代码合作与分享结合其他工具 总结 活动介绍…...

解读InnoDB数据库索引页与数据行的紧密关联

目录 一、快速走进索引页结构 &#xff08;一&#xff09;整体展示说明 &#xff08;二&#xff09;内容说明 File Header&#xff08;文件头部&#xff09; Page Header&#xff08;页面头部&#xff09; Infimum Supremum&#xff08;最小记录和最大记录&#xff09; …...

KubeSphere 与 Pig 微服务平台的整合与优化:全流程容器化部署实践

一、前言 近年来,为了满足越来越复杂的业务需求,我们从传统单体架构系统升级为微服务架构,就是把一个大型应用程序分割成可以独立部署的小型服务,每个服务之间都是松耦合的,通过 RPC 或者是 Rest 协议来进行通信,可以按照业务领域来划分成独立的单元。但是微服务系统相对…...

虚幻基础2:gameplay框架

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 ue框架&#xff1a;gameplay组成game modeactorcomponent player controllergame state 工作流程 ue框架&#xff1a;gameplay 组成 game mode 游戏类型和规则。可以控制游戏的开始与结束以及一些其他功能。 ac…...

在线base64转码工具

在线base64转码工具&#xff0c;无需登录&#xff0c;无需费用&#xff0c;用完就走。 官网地址&#xff1a; https://base64.openai2025.com 效果&#xff1a;...

2024年,我的技术探索与成长之路

2024年&#xff0c;我的技术探索与成长之路 2024年已经过去&#xff0c;作为一名技术爱好者和写作者&#xff0c;我回顾了过去一年在博客上记录的点滴&#xff0c;感慨良多。这一年&#xff0c;我不仅见证了技术的飞速发展&#xff0c;也在不断学习和实践中找到了自己的成长方向…...

【逆境中绽放:万字回顾2024我在挑战中突破自我】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 一、引言二、个人成长与盘点情感与心理成长学习与技能提升其它荣誉 三、年度创作历程回顾创作内容概…...

图谱之前端关系应用

文章目录 图谱之前端关系应用&#xff08;relation-graph、d3.js、echarts&#xff09;1. relation-graph应用实例优缺点 2. d3.js应用实例优缺点 3. echarts应用实例优缺点 总结 图谱之前端关系应用&#xff08;relation-graph、d3.js、echarts&#xff09; 1. relation-grap…...

Kibana:ES|QL 编辑器简介

作者&#xff1a;来自 Elastic drewdaemon ES|QL 很重要 &#x1f4aa; 正如你可能已经听说的那样&#xff0c;ES|QL 是 Elastic 的新查询语言。我们对 ES|QL 寄予厚望。它已经很出色了&#xff0c;但随着时间的推移&#xff0c;它将成为与 Elasticsearch 中的数据交互的最强大…...

建造者模式(或者称为生成器(构建器)模式)

一、什么是建造者模式&#xff1f; 将复杂对象的构建与表示进行分离&#xff0c;使得统一的构建过程&#xff0c;可以创建出不同的对象表现模式 就是将复杂对象里面的成员变量&#xff0c;设置不同的值&#xff0c;使得生成出来的对象拥有不同的属性值&#xff1b; 二、特点…...

【CTFHub】SQL注入cookie注入及知识点

打开题目页面如下 根据提示应该在cookie处注入&#xff0c;通过burp suite抓包并发到重放器 知识点 Cookie 是存储在用户本地计算机上的小文件&#xff0c;由 Web 服务器通过 HTTP 协议发送给浏览器&#xff0c;并保存在用户的浏览器端。当用户再次访问该网站时&#xff0c;浏…...

CSS中样式继承+优先级

继承属性和非继承属性 一、定义及分类 1、继承属性是指在父元素上设置了这些属性后&#xff0c;子元素会自动继承这些属性的值&#xff0c;除非子元素显式地设置了不同的值。 常见的继承属性: 字体 font 系列文本text-align text-ident line-height letter-spacing颜色 col…...

[leetcode](找到vector中的特定元素并删除)无重复字符的最长子串

一.找到vector中的特定元素并删除 #include <iostream> #include <vector> #include <algorithm> int main() { // 示例 vector std::vector<int> vec {1, 2, 3, 4, 5, 6}; // 要删除的元素 int aim 3; // 查找元素 auto it std::fin…...

记录一次 centos 启动失败

文章目录 现场1分析1现场2分析2搜索实际解决过程 现场1 一次断电,导致 之前能正常启动的centos 7.7 起不来了有部分log , 关键信息如下 [1.332724] XFS(sda3): Internal error xfs ... at line xxx of fs/xfs/xfs_trans.c [1.332724] XFS(sda3): Corruption of in-memory data…...

Linux使用SSH连接GitHub指南

基础配置流程 步骤1:生成SSH密钥 打开终端:首先,打开你的Linux终端。 生成SSH密钥对:输入以下命令来生成一个新的SSH密钥对: ssh-keygen -t rsa -b 4096 -C "your_email@example.com"-t rsa:使用RSA加密算法生成密钥。-b 4096:密钥长度为4096位,增加安全性。…...

QModbusTCPClient占用内存持续增长

最近使用QModbusTCPClient通信&#xff0c;需要频繁发送读写请求&#xff0c;发现软件占用内存一直在增减&#xff0c;经过不断咨询和尝试&#xff0c;终于解决了。 1.方案一&#xff08;失败&#xff09; 最开始以为是访问太频繁&#xff0c;导致创建reply的对象比delete re…...

具体场景的 MySQL 与 redis 数据一致性设计

场景1: 短视频修改名称,简介等视频数据更新还是清除更新策略如何设计?热 key 处理其他处理自己的数据查询 其他问题冷热突变/突然的热 key 加入如果产品要更新后能所有用户立马看到效果怎么办 ? 场景2: 抢红包如何设计?限制红包的数量 分布式锁的自旋问题 场景 3: 更改用户主…...

机器学习之SVD奇异值分解实现图片降维

SVD奇异值分解实现图片降维 目录 SVD奇异值分解实现图片降维1 SVD奇异值分解1.1 概念1.2 基本步骤1.2.1 矩阵分解1.2.2 选择奇异值1.2.3 重建矩阵1.2.4 降维结果 1.3 优缺点1.3.1 优点1.3.2 缺点 2 函数2.1 函数导入2.2 函数参数2.3 返回值2.4 通过 k 个奇异值降维 3 实际测试3…...

基于.Net Core+Vue的文件加密系统

1系统架构图 2 用例图 管理员角色的用例&#xff1a; 文件分享大厅&#xff1a;管理员可以访问文件分享大厅&#xff0c;下载文件。个人信息管理&#xff1a;管理员可以更新自己的个人信息&#xff0c;修改密码。用户管理&#xff1a;管理员负责创建、更新或删除用户账户&…...

数据结构(链表 哈希表)

在Python中&#xff0c;链表和哈希表都是常见的数据结构&#xff0c;可以用来存储和处理数据。 链表是一种线性数据结构&#xff0c;由一系列节点组成&#xff0c;每个节点包含一个数据元素和一个指向下一个节点的指针。链表可以用来实现栈、队列以及其他数据结构。Python中可…...

1161 Merging Linked Lists (25)

Given two singly linked lists L1​a1​→a2​→⋯→an−1​→an​ and L2​b1​→b2​→⋯→bm−1​→bm​. If n≥2m, you are supposed to reverse and merge the shorter one into the longer one to obtain a list like a1​→a2​→bm​→a3​→a4​→bm−1​⋯. For ex…...

第23篇 基于ARM A9处理器用汇编语言实现中断<五>

Q&#xff1a;怎样修改HPS Timer 0定时器产生的中断周期&#xff1f; A&#xff1a;在上一期实验的基础上&#xff0c;可以修改按键中断服务程序&#xff0c;实现红色LED上的计数值递增的速率&#xff0c;主程序和其余代码文件不用修改。 实现以下功能&#xff1a;按下KEY0…...

VS Code--常用的插件

原文网址&#xff1a;VS Code--常用的插件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍VS Code&#xff08;Visual Studio Code&#xff09;常用的插件。 插件的配置 默认情况下&#xff0c;插件会放到这里&#xff1a;C:\Users\xxx\.vscode\extensions 修改插件位置的方法 …...

数智化转型 | 星环科技Defensor 助力某银行数据分类分级

在数据驱动的金融时代&#xff0c;数据安全和隐私保护的重要性日益凸显。某银行作为数字化转型的先行者&#xff0c;面临着一项艰巨的任务&#xff1a;如何高效、准确地对分布在多个业务系统、业务库与数仓数湖中的约80万个字段进行数据分类和分级。该银行借助星环科技数据安全…...

【md文档】公式简单介绍

在Markdown文档中&#xff0c;可以使用LaTeX语法来插入数学公式。以下是一些常见的LaTeX公式示例及其在Markdown中的写法&#xff1a; 1. 行内公式 行内公式使用单个美元符号 $ 包裹。 ‘’’ 这是一个行内公式&#xff1a;$E mc^2$效果&#xff1a; 这是一个行内公式&…...

macOS Sequoia 15.3 beta3(24D5055b)发布,附黑、白苹果镜像下载地址

“ 镜像&#xff08;黑苹果引导镜像、白苹果Mac镜像、黑苹果虚拟机镜像&#xff09;下载地址&#xff1a;黑果魏叔官网。” 关于macOS Sequoia 15.3 beta3&#xff08;24D5055b&#xff09;&#xff0c;以下是对其的详细介绍&#xff1a; 一、版本发布信息 发布时间 &#xf…...

HTML学习笔记(4)

目录 一、背景相关样式 二、定位position 三、javascript 1、变量的定义 2、数据类型 3、绑定事件 一、背景相关样式 background-image: url(); // 背景图片 background-repeat: repeat; // 背景图片是否平铺 no-repeat background-size: 200px; // 背景图片尺寸 cover把…...

密钥轮换时,老数据该如何处理

密钥轮换时是否需要重新加密老数据&#xff0c;取决于具体的加密策略和密钥管理系统的设计。以下是两种常见情况及处理方式&#xff1a; 1. 密钥轮换不涉及重新加密老数据 场景&#xff1a;如果密钥轮换仅用于新数据的加密&#xff0c;而老数据仍使用旧密钥解密。 处理方式&a…...

Django框架:python web开发

1.环境搭建&#xff1a; &#xff08;a&#xff09;开发环境&#xff1a;pycharm &#xff08;b&#xff09;虚拟环境&#xff08;可有可无&#xff0c;优点&#xff1a;使用虚拟环境可以把使用的包自动生成一个文件&#xff0c;其他人需要使用时可以直接选择导入包&#xff…...

RCD-IoT:在高数据包传输率下,利用资源受限设备实现工业监测与控制

论文标题 中文&#xff1a;RCD-IoT&#xff1a;在高数据包传输率下&#xff0c;利用资源受限设备实现工业监测与控制 英文&#xff1a;RCD-IoT: Enabling Industrial Monitoring and Control with Resource-Constrained Devices Under High Packet Transmission Rates 作者信…...

LabVIEW实车四轮轮速信号再现系统

开发了一个基于LabVIEW的实车四轮轮速信号再现系统。该系统解决现有电机驱动传感器成本高、重复性差、真实性差和精度低等问题&#xff0c;提供一种高精度、低成本的轮速信号再现解决方案。 项目背景 ABS轮速传感器在现代汽车安全系统中发挥着至关重要的作用。为保证其准确性和…...

【Vim Masterclass 笔记16】S07L32 + L33:同步练习09 —— 掌握 Vim 宏操作的六个典型案例(含点评课内容)

文章目录 S07L32 Exercise 09 - Macros1 训练目标2 操作指令2.1. 打开 macros-practice.txt 文件2.2. 练习1&#xff1a;将旧版 Python 代码转换为新版写法2.3. 练习2&#xff1a;根据列表内容批量创建 Shell 脚本2.4. 练习3&#xff1a;对电话号码作格式化处理2.5. 练习4&…...

LabVIEW 实现线路板 PCB 可靠性测试

在电子设备制造领域&#xff0c;线路板 PCB&#xff08;Printed Circuit Board&#xff09;的可靠性直接影响产品的整体性能和使用寿命。企业在生产新型智能手机主板时&#xff0c;需要对 PCB 进行严格的可靠性测试&#xff0c;以确保产品在复杂环境下能稳定运行。传统的测试方…...

深入内核讲明白Android Binder【二】

深入内核讲明白Android Binder【二】 前言一、Binder通信内核源码整体思路概述1. 客户端向服务端发送数据流程概述1.1 binder_ref1.2 binder_node1.3 binder_proc1.4 binder_thread 2. 服务端的binder_node是什么时候被创建的呢&#xff1f;2.1 Binder驱动程序为服务创建binder…...

TextButton组件的功能与用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了CircleAvatar Widget,本章回中将介绍Button这种Widget&#xff0c;闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 关于Button相信大家都很熟悉&#xff0c;也就是我们常用的按钮。用户按下按钮后…...

HTML5+Canvas实现的鼠标跟随自定义发光线条源码

源码介绍 HTML5Canvas实现的鼠标跟随自定义发光线条特效源码非常炫酷&#xff0c;在黑色的背景中&#xff0c;鼠标滑过即产生彩色变换的发光线条效果&#xff0c;且线条周围散发出火花飞射四溅的粒子光点特效。 效果预览 源码如下 <!DOCTYPE html PUBLIC "-//W3C//D…...

AS自治系统

引言 通过前几天的学习&#xff0c;我们基本了解了静态路由&#xff0c;有静态就肯定有动态&#xff0c;那他们又有哪些区别呢&#xff1f; 静态路由&#xff1a;由网络管理员手工填写的路由信息。动态路由&#xff1a;所有路由器运行相同路由协议&#xff0c;之后&#xff0c;…...

PyQt6 与 REST API:如何实现桌面应用与 Web 服务的无缝对接

PyQt6 与 REST API&#xff1a;如何实现桌面应用与 Web 服务的无缝对接 今日水一篇 在当今互联网时代&#xff0c;数据交互无处不在。桌面应用与 Web 服务的结合&#xff0c;能够为用户提供更丰富、更实时的功能体验。本文将介绍如何利用 PyQt6 实现桌面应用与 REST API 的无…...

endnote x9 如何将参考文献和文中的应用格式由annotated变为编码,例[1],[2]

在 EndNote X9 中&#xff0c;将参考文献和文中引用格式更改为编码形式&#xff08;如 [1], [2]&#xff09;需要以下步骤&#xff1a; 1. 选择合适的输出样式 打开 EndNote X9。点击菜单栏的 "Edit" > "Output Styles" > "Open Style Manage…...

题解 CodeForces 430B Balls Game 栈 C/C++

题目传送门&#xff1a; Problem - B - Codeforceshttps://mirror.codeforces.com/contest/430/problem/B翻译&#xff1a; Iahub正在为国际信息学奥林匹克竞赛&#xff08;IOI&#xff09;做准备。有什么比玩一个类似祖玛的游戏更好的训练方法呢&#xff1f; 一排中有n个球…...

管理口令安全和资源(二)

DBMS_METADATA DBMS_METADATA 是 Oracle 数据库中的一个包&#xff0c;它提供了用于管理数据库元数据的工具和过程。元数据是关于数据的数据&#xff0c;它描述了数据库的结构&#xff0c;包括表、视图、索引、存储过程、用户和其他数据库对象的信息。DBMS_METADATA 包允许用户…...

【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)

文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统&#xff0c;广泛应用于FortiGate下一代防火墙&#xff0c;为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…...

Cadence笔记--原理图导入PCB

1、以PMU6050为例&#xff0c;首先在原理图双击PMU6050器件&#xff0c;在PCB_Footprint目录填写PCB封装名称并且保存&#xff0c;如下图所示&#xff1a; 2、确保原理图命名的名称不一样&#xff0c;否则会出错&#xff0c;这里PMU6050更改了NC等名称&#xff0c;如下图所示&a…...

TOSUN同星TsMaster使用入门——3、使用系统变量及c小程序结合panel面板发送报文

本篇内容将介绍TsMaster中常用的Panel面板控件以及使用Panel控件通过系统变量以及c小程序来修改信号的值&#xff0c;控制报文的发送等。 目录 一、常用的Panel控件介绍 1.1系统——启动停止按钮 1.2 显示控件——文本框 1.3 显示控件——分组框 1.4 读写控件——按钮 1.…...

Redis 缓存穿透、击穿、雪崩 的区别与解决方案

前言 Redis 是一个高性能的键值数据库&#xff0c;广泛应用于缓存、会话存储、实时数据分析等场景。然而&#xff0c;在高并发的环境下&#xff0c;Redis 缓存可能会遇到 缓存击穿、缓存穿透 和 缓存雪崩 这三大问题。这些问题不仅影响系统的稳定性和性能&#xff0c;还经常出…...