Python模拟真人鼠标轨迹

一.API跨语言平台支持

鼠标轨迹API 底层实现采用 C/C++ 语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。

通过 DLL 封装,开发者可以在 C++、Python、易语言、按键精灵等多种编程语言中使用鼠标轨迹模拟技术。这种封装方式提供了一种简便的接口,使得不同背景的开发者都能够轻松集成和使用这一技术。

二.鼠标轨迹 Demo 效果演示

  • 1.开始坐标为(100,100),结束坐标为(800,800),通过调用接口获得 4 条鼠标轨迹
  • 2.开始坐标为(1000,100),结束坐标为(800,800),通过调用接口获得 2 条鼠标轨迹

三.C++鼠标轨迹 Demo 下载

百度云盘下载
夸克云盘下载
123云盘下载

四.C++代码演示

1.头文件
  1. // Copyright (c) 2024
  2. //
  3. // 保留所有权利。
  4. //
  5. // 在满足以下条件的情况下,允许重新使用和分发:
  6. //
  7. // 1. 代码必须保留上述版权声明、作者声明和/或最初发布的网址。
  8. // 2. 不得将代码用于商业目的,除非与版权所有者签订了书面协议。
  9. // 3. 修改过的源版本必须清楚地标识出修改的部分,并且不得以任何方式表明版权所有者支持或认可这些修改。
  10. //
  11. #ifndef _SN_SDK_H__
  12. #define _SN_SDK_H__
  13. #include <windows.h>
  14. //返回参数
  15. typedef struct SN_RESULT {
  16. int code; //错误码,如果为 0 表示成功,否则表示错误号
  17. char message[4096]; //错误信息,如果为 "OK" 表示成功,否则返回错误信息
  18. }SN_RESULT;
  19. //坐标参数
  20. typedef struct SN_POINT
  21. {
  22. int x; //屏幕坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
  23. int y; //屏幕坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
  24. }SN_POINT;
  25. //轨迹参数
  26. typedef struct SN_POINT_PARAMS
  27. {
  28. struct SN_POINT point;//屏幕坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
  29. int delayTime; //延时时间(单位:毫秒),仅供参考
  30. }SN_POINT_PARAMS;
  31. /*创建句柄
  32. *
  33. * 参数:
  34. * [in] szKey: 卡密(购买卡密:https://shop.4yuns.com/links/7C9F16B7)
  35. * [in] pOnnxFilePath:设置 onnx 模型文件路径,如果设置为 NULL,默认和 DLL文件同级目录
  36. * [out] pResult: 返回错误信息,参数pResult.code(错误码)如果为 0 表示成功,否则表示错误号;
  37. *
  38. * 返回值:成功返回句柄,失败返回NULL
  39. *
  40. */
  41. HANDLE WINAPI apiSNCreateHandle(char* szKey, char* pOnnxFilePath, SN_RESULT* pResult);
  42. /*获取鼠标移动轨迹
  43. *
  44. * 参数:
  45. * [in] handle: 句柄(通过调用apiSNCreateHandle得到)
  46. * [in] startPoint: 开始坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
  47. * [in] endPoint: 结束坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
  48. * [out] points: 轨迹数组,如果数组中元素 point 出现(-1,-1),表示鼠标轨迹结束
  49. *
  50. * 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
  51. *
  52. */
  53. SN_RESULT WINAPI apiSNMouseMove(HANDLE handle, SN_POINT startPoint, SN_POINT endPoint, SN_POINT_PARAMS* points);
  54. /*获取版本号
  55. *
  56. * 参数:
  57. * [in] handle: 句柄(通过调用apiSNCreateHandle得到)
  58. * [out] szVersion: 版本号
  59. *
  60. * 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
  61. *
  62. */
  63. SN_RESULT WINAPI apiSNGetVersion(HANDLE handle, char* szVersion);
  64. /*获取错误信息
  65. *
  66. * 参数:
  67. * [in] handle: 句柄(通过调用apiSNCreateHandle得到)
  68. *
  69. * 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
  70. *
  71. */
  72. SN_RESULT WINAPI apiSNGetError(HANDLE handle);
  73. /*释放句柄(内存)
  74. *
  75. * 参数:
  76. * [in] handle: 句柄(通过调用apiSNCreateHandle得到)
  77. *
  78. * 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
  79. *
  80. */
  81. SN_RESULT WINAPI apiSNDestroyHandle(HANDLE handle);
  82. #endif // !_SN_SDK_H__
2.CPP文件
  1. /****************************************************************************************/
  2. @SDK功能描述:鼠标轨迹
  3. /******************************************************************************************/
  4. //
  5. #include <iostream>
  6. #include "include/SNSDK.h"
  7. #pragma comment(lib,"./dll/x86/SNSDK.lib")
  8. int main()
  9. {
  10. SN_RESULT pResult = { 0 };
  11. char* pKey = (char*)"SNKJaURwbfuhcaQaCMJVhdByPZMVsZdqRUMjfWrxY1A5";
  12. //1.创建句柄
  13. HANDLE pHandle = apiSNCreateHandle(pKey,&pResult);
  14. if (!pHandle)
  15. {
  16. printf("error code:%d message:%s \n",pResult.code,pResult.message);
  17. return -__LINE__;
  18. }
  19. //2.获取轨迹
  20. SN_POINT startPoint = { 100,100 }; //开始坐标
  21. SN_POINT endPoint = { 800,800 }; //结束坐标
  22. SN_POINT_PARAMS track[4096] = { 0 };//轨迹
  23. pResult = apiSNMouseMove(pHandle, startPoint, endPoint, track);
  24. if (pResult.code != 0)
  25. {
  26. printf("error code:%d message:%s \n", pResult.code, pResult.message);
  27. return -__LINE__;
  28. }
  29. //3.鼠标根据轨迹移动,轨迹最后一个点(-1,-1)
  30. for (int i = 0; i < 4096; i++)
  31. {
  32. struct SN_POINT point = track[i].point;
  33. if (point.x <= 0 && point.y <= 0)//轨迹最后一个点(-1,-1)
  34. break;
  35. printf("x:%d y:%d delay_time:%d \n", point.x, point.y, track[i].delayTime);
  36. }
  37. //4.释放内存
  38. pResult = apiSNDestroyHandle(pHandle);
  39. return 1;
  40. }
  41. /*
  42. x:100 y:100 delay_time:0
  43. x:100 y:98 delay_time:10
  44. x:103 y:98 delay_time:15
  45. x:111 y:98 delay_time:16
  46. x:116 y:101 delay_time:15
  47. x:122 y:104 delay_time:2
  48. x:129 y:107 delay_time:13
  49. x:135 y:109 delay_time:2
  50. x:144 y:112 delay_time:14
  51. x:155 y:117 delay_time:2
  52. x:167 y:123 delay_time:14
  53. x:180 y:128 delay_time:2
  54. x:193 y:134 delay_time:13
  55. x:209 y:138 delay_time:2
  56. x:225 y:144 delay_time:13
  57. x:238 y:149 delay_time:5
  58. x:254 y:157 delay_time:10
  59. x:269 y:162 delay_time:5
  60. x:282 y:168 delay_time:11
  61. x:298 y:175 delay_time:5
  62. x:311 y:180 delay_time:10
  63. x:326 y:185 delay_time:6
  64. x:341 y:193 delay_time:9
  65. x:369 y:211 delay_time:15
  66. x:396 y:231 delay_time:16
  67. x:419 y:251 delay_time:16
  68. x:442 y:270 delay_time:16
  69. x:461 y:285 delay_time:17
  70. x:481 y:300 delay_time:15
  71. x:491 y:311 delay_time:15
  72. x:502 y:319 delay_time:2
  73. x:513 y:329 delay_time:14
  74. x:523 y:343 delay_time:2
  75. x:535 y:355 delay_time:14
  76. x:546 y:369 delay_time:0
  77. x:558 y:383 delay_time:15
  78. x:570 y:397 delay_time:2
  79. x:582 y:411 delay_time:13
  80. x:596 y:427 delay_time:2
  81. x:608 y:443 delay_time:14
  82. x:620 y:459 delay_time:5
  83. x:633 y:476 delay_time:10
  84. x:645 y:490 delay_time:5
  85. x:656 y:503 delay_time:11
  86. x:666 y:515 delay_time:5
  87. x:675 y:527 delay_time:11
  88. x:684 y:538 delay_time:5
  89. x:694 y:551 delay_time:11
  90. x:702 y:565 delay_time:5
  91. x:710 y:577 delay_time:11
  92. x:716 y:588 delay_time:5
  93. x:723 y:598 delay_time:11
  94. x:728 y:606 delay_time:5
  95. x:733 y:615 delay_time:11
  96. x:738 y:622 delay_time:5
  97. x:743 y:631 delay_time:11
  98. x:747 y:637 delay_time:5
  99. x:750 y:644 delay_time:11
  100. x:753 y:652 delay_time:5
  101. x:756 y:659 delay_time:10
  102. x:759 y:666 delay_time:5
  103. x:761 y:673 delay_time:11
  104. x:764 y:680 delay_time:5
  105. x:766 y:687 delay_time:11
  106. x:768 y:694 delay_time:5
  107. x:769 y:701 delay_time:10
  108. x:771 y:708 delay_time:5
  109. x:772 y:714 delay_time:11
  110. x:773 y:722 delay_time:5
  111. x:774 y:729 delay_time:10
  112. x:777 y:743 delay_time:16
  113. x:778 y:755 delay_time:15
  114. x:778 y:764 delay_time:16
  115. x:780 y:775 delay_time:16
  116. x:781 y:784 delay_time:16
  117. x:781 y:785 delay_time:15
  118. x:781 y:789 delay_time:2
  119. x:781 y:790 delay_time:13
  120. x:781 y:792 delay_time:2
  121. x:782 y:796 delay_time:14
  122. x:782 y:796 delay_time:2
  123. x:782 y:797 delay_time:14
  124. x:782 y:798 delay_time:15
  125. x:782 y:800 delay_time:311
  126. x:784 y:800 delay_time:16
  127. x:784 y:800 delay_time:5
  128. x:785 y:800 delay_time:10
  129. x:786 y:800 delay_time:5
  130. x:786 y:800 delay_time:11
  131. x:788 y:800 delay_time:6
  132. x:789 y:800 delay_time:9
  133. x:790 y:800 delay_time:5
  134. x:791 y:800 delay_time:10
  135. x:793 y:800 delay_time:16
  136. x:795 y:800 delay_time:16
  137. x:796 y:800 delay_time:15
  138. x:797 y:800 delay_time:15
  139. x:797 y:800 delay_time:2
  140. x:798 y:800 delay_time:15
  141. x:798 y:800 delay_time:30
  142. x:799 y:800 delay_time:15
  143. x:799 y:800 delay_time:15
  144. */

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】容器适配器,stack,queue,priority_queue详解,模拟实现

目录 1. stack和queue的介绍 1.1 stack的成员函数 1.2 queue的成员函数 1.3 stack的使用 1.4 queue的使用 1.5 Container模板参数&#xff0c;deque 2. priority_queue优先级队列的介绍 3. stack模拟实现 3.1 初始结构 3.2 push 3.3 pop 3.4 top 3.5 empty 3.6 s…

C++笔试强训15、16、17

文章目录 笔试强训15一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训16一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训17一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训15 一、选择题 1-5题 共有派生下&#xff0c;派生类的成员函数只能访问基类的…

揭秘智能派单流程:如何利用AI实现高效的自动化任务分配?

前言 在当今的企业管理和服务行业中&#xff0c;高效的工作分配与任务管理是提升企业竞争力的重要因素。智能派单流程通过结合先进的算法和人工智能技术&#xff0c;实现了工作任务的自动化分配和优化管理&#xff0c;不仅帮助企业提升了工作效率&#xff0c;降低了运营成本&a…

Kubernetes强制删除terminating状态的namespace

Kubernetes中的Namespace处于Terminating状态并且常规删除不起作用。 1.Namespace长时间处于Terminating状态往往是因为某些finalizers阻止了它的删除。 kubectl get namespace <namespace-name> -o json > namespace.json 2.编辑生成的 namespace.json文件&#xff…

在 Vue 3 中实现“折叠”与“展开”文本内容

偶然间遇到一个场景&#xff0c;怎么判断一段文本是否超过 5 行或者指定行数&#xff0c;并在超过时显示 "展开/收起" 按钮。那应该如何实现呢&#xff1f; 在 Vue 3 的项目下实现&#xff1a; <template><div class"text-container"><di…

计算机毕业设计 学院网站系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Java框架学习(Spring)(ioc)(01)

简介&#xff1a;以本片记录在尚硅谷学习ssm-spring-ioc时遇到的小知识 详情移步&#xff1a;想参考的朋友建议全部打开相互配合学习&#xff01; 视频&#xff1a; 014-spring-框架概念理解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1AP411s7D7?p14&vd_sou…

【楚怡杯】职业院校技能大赛 “云计算应用” 赛项样题九

某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenStack搭建企业内部私有云平台&#xff0c;开源Kubernetes搭建云原生服务平台&#xff0c;选…

GIS留学院校介绍-英国篇

看前须知 关于语言成绩要求&#xff1a; 通常英国院校的雅思成绩要求分为5个等级&#xff0c;标准分别如下&#xff1a; 1级&#xff1a;总分6.5分&#xff0c;每个部分最低6.0分 2级&#xff1a;总分7.0&#xff0c;每个部分至少6.5分 3级&#xff1a;总分7.0分&#xff…

2024年有什么开放式耳机推荐?盘点开放式蓝牙耳机排行榜前五名

​到了2024年&#xff0c;开放式耳机无疑成为了耳机市场的宠儿。它们的优势在于&#xff0c;不仅佩戴舒适&#xff0c;还能在保护听力的同时&#xff0c;让你保持对周围环境的警觉&#xff0c;这对于爱好户外探险的朋友来说&#xff0c;无疑是一个巨大的安全加分项。作为一名资…

(附源码)微信小程序的拼车设计-计算机毕设19413

微信小程序的拼车设计 摘 要 在微信小程序的拼车服务中&#xff0c;后端架构巧妙地运用了SSM&#xff08;Spring、SpringMVC、MyBatis&#xff09;框架&#xff0c;为用户带来了流畅、高效的体验。Spring框架作为整个系统的核心&#xff0c;不仅管理着业务逻辑&#xff0c;还通…

分布式光伏的发电监控

国拥有丰富的清洁可再生能源资源储量&#xff0c;积极开发利用可再生能源&#xff0c;为解决当前化石能源短缺与环境污染严重的燃眉之急提供了有效途径[1]。但是可再生能源的利用和开发&#xff0c;可再生能源技术的发展和推广以及可再生能源资源对环境保护的正向影响&#xff…

PCB生产,在钻咀和成品孔径之间,你会优先满足哪一项呢

高速先生成员--王辉东 曹梦总是说&#xff0c;人生如《忐忑》&#xff0c;虽然没有准确的歌词&#xff0c;却演绎的惊心动魄…… 她是工厂的工程评估员&#xff0c;对于PCB的热爱&#xff0c;就像拖拉机上山&#xff0c;轰轰烈烈&#xff0c;不知疲倦。 她一向秉承的原则是&…

Excel名字查重筛选,查找重复内容原来这么简单

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f50d; 在处理大量数据时&#xff0c;尤其是人员名单或客户信息时&#xff0c;确保没有重复的名字是非常重要的。在Excel中&#xff0c;有几种方法可以帮助我们快速查找和处理重复的名字。今天&#xff0c;我们将介绍…

[linux 驱动]块设备驱动详解与实战

目录 1 描述 2 结构体 2.1 block_device_operations 2.2 gendisk 2.3 block_device 2.4 request_queue 2.5 request 2.6 bio 3.7 blk_mq_tag_set 3.8 blk_mq_ops 3 相关函数 3.1 注册注销块设备 3.1.1 register_blkdev 3.1.2 unregister_blkdev 3.2 gendisk 结构…

算法思想之前缀和

前缀和&#xff1a;快速求出数组中某连续区间的和 一.一维前缀和(模板) 1.题目&#xff1a;【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 给定一个长度为n的数组a1,a2,....ana1​,a2​,....an​.&#xff0c;接下来有q次查询, 每次查询有两个参数l, r&#xff0c;对于每个…

打造你的专属主题-VitePress保姆级教程

本篇为vitepress系列教程&#xff0c;在开始前&#xff0c;若还不了解vitepress的小伙伴可以看一下以往文章&#xff1a; 不敲一行代码&#xff01;助你快速搭建属于自己的官网博客&#xff01;-VitePress保姆级教程 文章目录 VitePress主题配置准备自定义主题配置标题配置图标…

【软件文档资料】软件代码编写规范-交付文档支撑(Word原件)

&#xff08;一&#xff09;一开始就必须正确的使用规范 &#xff08;二&#xff09;简易性原则 &#xff08;三&#xff09;清晰性原则 &#xff08;四&#xff09;健壮性原则 &#xff08;五&#xff09;效率原则 软件资料清单列表部分文档清单&#xff1a;工作安排任务书&am…

visual studio 调试技巧

visual studio 调试技巧 概述 在使用visual studio 进行调试的时候&#xff0c;有几个调试方法很好用&#xff0c;这里做一些记录。 GTEST 单元测试 参考 VS2022创建C C GTEST工程 - Hello-FPGA - 博客园 (cnblogs.com) 内存查看 命令行测试动态库 附加到进程调试动态库 …

数造科技荣获“2024爱分析·数据智能优秀厂商”

近日&#xff0c;2024年第六届爱分析数据智能高峰论坛圆满举办。会议期间&#xff0c;“2024爱分析数据智能优秀厂商”榜单正式揭晓&#xff0c;数造科技凭借其卓越的技术创新能力与丰富的实践应用案例&#xff0c;脱颖而出&#xff0c;成功入选“数据智能优秀厂商”。 评选严苛…