鼠标连点器同时点多个位置_C++自制鼠标连点器
C++自制鼠标连点器
目录
- 文章目录如下:(以文章为准,可能未更新)
一、什么是鼠标连点器
二、源码分享网盘压缩包
三、代码解析函数模块解析主函数解析
四、附录 参考
一、什么是鼠标连点器
- 介绍
- 就是代替你的手在电脑上点来点去的!
- 用处
- 爱打游戏吗?专治刷时长,让它自己帮你点击!睡一觉就满级了!
- 送礼物的时候,是不是要点来点去的?让它帮你点,一送就是几百几千个礼物!
- 这么说,你应该觉得有用了吧!
二、源码分享
网盘
- (原版)链接:https://pan.baidu.com/s/1NuXG7bwr7D6EReujI5ex3w
提取码:6bgf
- (新版)链接: https://pan.baidu.com/s/1xGl-OigoAQRK4hf7RMsLtw
提取码:oqi9
源码
- 为了下面讲解方便,我也将源码贴在这里!
#include <cstdio>
#include <conio.h>
#include <ctime>
#include <windows.h>
#include <vector>
#include <string>
void set_cursor(bool hide) { // 隐藏/显示 光标HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(handle, &CursorInfo); // 获取控制台光标信息CursorInfo.bVisible = hide; // 隐藏控制台光标SetConsoleCursorInfo(handle, &CursorInfo); // 设置控制台光标状态
}
void gotoxy(int x, int y) { // 设置光标COORD c = {(SHORT)x, (SHORT)y};SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void setmode() {HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);DWORD mode;GetConsoleMode(hStdin, &mode);mode &= ~ENABLE_QUICK_EDIT_MODE; // 移除快速编辑模式// mode &= ~ENABLE_INSERT_MODE; // 移除插入模式// mode &= ~ENABLE_MOUSE_INPUT;SetConsoleMode(hStdin, mode);
}
struct Click {int x, y;int delay;int button_down, button_up;std::string msg;
};
int main() {setmode();std::printf("欢迎使用鼠标连点器!nn");
_ReStart_: // 重新开始的地方std::system("mode con cols=40 lines=15");set_cursor(true);SetWindowPos(GetConsoleWindow(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // 窗口置顶std::puts("请选择模式:");std::puts(" 1. 点击位置为鼠标指针,鼠标左/右键点击");std::puts(" 2. 点击位置固定循环,鼠标左/右键点击");std::puts(" 0. 退出");int ch = _getch();while(ch < '0' || ch > '2') ch = _getch();std::system("cls");set_cursor(false);if(ch == '1') {set_cursor(true);std::puts("配置:");std::printf("请输入每秒钟的点击次数(1—1000):");int spd;std::scanf("%d", &spd);std::printf("n请选择点击的键(0左键,1右键):");ch = _getch();while(ch < '0' || ch > '1') ch = _getch();int CLICK_BUTTON_DOWN = (ch == '0' ? MOUSEEVENTF_LEFTDOWN : MOUSEEVENTF_RIGHTDOWN);int CLICK_BUTTON_UP = (ch == '0' ? MOUSEEVENTF_LEFTUP : MOUSEEVENTF_RIGHTUP);std::system("cls");int cont = true, lst_tim = clock();set_cursor(false);while(true) {gotoxy(0, 0);std::printf("连点器%s. . . nn", cont ? "运行中" : "已暂停");std::printf("速度:%d次/秒n", spd);std::printf(" 空格键t%sn", cont ? "暂停" : "继续");std::printf(" Esc键 t退出n");SetWindowPos(GetConsoleWindow(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // 窗口置顶if(_kbhit()) {int ch = _getch();if(ch == 27) { // Escbreak;} else if(ch == ' ') { // 空格cont = !cont;}} else {if(cont) {if(clock() - lst_tim >= 1.0 / spd * CLOCKS_PER_SEC) {lst_tim = clock();POINT pt;GetCursorPos(&pt);mouse_event(CLICK_BUTTON_DOWN, 0, 0, 0, 0);mouse_event(CLICK_BUTTON_UP, 0, 0, 0, 0);}}}}} else if(ch == '2') {std::printf("请输入您要点击的位置个数:");int times;std::scanf("%d", ×);std::vector<Click> ps;set_cursor(true);for(int i = 1; i <= times; i++) {std::system("cls");std::printf("将鼠标移动到第%d个位置上后按下空格:", i);while(_getch() != ' ') {}POINT p;GetCursorPos(&p);ps.push_back({p.x, p.y, 0, 0, 0, ""});std::printf("n需要按下的键(0左键,1右键):");char ch = _getch();while(ch < '0' || ch > '1') ch = _getch();ps.back().button_down = (ch == '0' ? MOUSEEVENTF_LEFTDOWN : MOUSEEVENTF_RIGHTDOWN);ps.back().button_up = (ch == '0' ? MOUSEEVENTF_LEFTUP : MOUSEEVENTF_RIGHTUP);std::printf("n在上一次点击后需要等待多少毫秒:");int delay;std::scanf("%d", &delay);ps.back().delay = delay;std::printf("n附加描述(可不填):");char msg[10000];gets(msg);gets(msg);ps.back().msg = msg;}int cont = true;int now = 0;int lst_tim = clock();std::system("cls");set_cursor(false);while(true) {gotoxy(0, 0);std::printf("连点器%s. . . nn", cont ? "运行中" : "已暂停");std::printf("当前位置描述:%sn", ps[now].msg.c_str());std::printf("需要等待:%d秒n", ps[now].delay);std::printf("点击按键:%s键n", (ps[now].button_down == MOUSEEVENTF_LEFTDOWN ? "左" : "右"));std::printf(" 空格键t%sn", cont ? "暂停" : "继续");std::printf(" Esc键 t退出n");SetWindowPos(GetConsoleWindow(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // 窗口置顶if(_kbhit()) {int ch = _getch();if(ch == 27) { // Escbreak;} else if(ch == ' ') { // 空格cont = !cont;}} else {if(cont) {if(clock() - lst_tim > ps[now].delay) {lst_tim = clock();POINT pt;GetCursorPos(&pt);SetCursorPos(ps[now].x, ps[now].y);mouse_event(ps[now].button_down, 0, 0, 0, 0);mouse_event(ps[now].button_up, 0, 0, 0, 0);SetCursorPos(pt.x, pt.y);if(now + 1 == (int)ps.size()) now = 0;elsenow = now + 1;}}}}} elsereturn 0;std::system("cls");std::printf("欢迎回来!nn");goto _ReStart_;return 0;
}
三、代码解析
函数模块解析
- 未完续,敬请期待
主函数解析
- 未完续,敬请期待
四、附录
参考
- https://www.jianshu.com/p/638b20ac5c4c
鼠标连点器同时点多个位置_C++自制鼠标连点器相关推荐
- 鼠标连点器同时点多个位置_MAC上最强鼠标——Magic Mouse2使用指南
网上很多评测都不看好magic mouse2,但事实上,如果有正确的使用方法,加上合适的触发设置,如果你本身也习惯macOS系统的话,它就很有可能是你所使用过的最强鼠标. 为什么需要magic mou ...
- 鼠标连点器同时点多个位置_一台电脑登录多个微信,简单,按住ENTER,鼠标快速点,扫描OK...
今天继续分享 同一台电脑如何登陆多个微信! 1.右击您的微信图标,把目标位置进行复制,然后打开,从公众号下载的这个文件(自己在记事本敲打出来也可以的,或者复制下边这段代码,保存为duokai.dat文 ...
- [转]在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录...
[转]在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录 http://www.cnblogs.com/skywind/archive/2009/05/22/14 ...
- vue+element制作音乐播放器播放进度条bug(鼠标拖拽slider滑块滑动到指定位置无效)
最开始bug还没解决时的效果图 bug解决后的效果图 项目场景: 想自己做一个基于vue仿网易云音乐的音乐网站,在制作播放器的时候用到了element ui里面的slider组件,制作完成后发现使用c ...
- java写键盘鼠标录制器,易语言仿按键精灵录制键盘鼠标操作的代码
DLL命令表 .版本 2 .DLL命令 取按键状态, 短整数型, "user32.dll", "GetAsyncKeyState" .参数 鼠标键, 整数型 . ...
- 查看器_三款完美替代Windows10自带照片查看器的神器!
Windows10系统中的看图软件Microsoft 照片,被吐槽已经不是一天两天了,2020年马上过完了,我在使用照片功能查看图片时还会出现假死问题. 如果少点bug,说实话Microsoft 照片 ...
- excel切片器_excel中的超级好用的筛选神器——切片器
对于excel中的切片器,很多朋友多多少少了解一些,但是日常工作中仍然习惯用筛选功能,很少用到切片器,那么就看下这篇文章的切片器功能介绍,小编带你认识不一样的筛选神器. 一.创建智能表. excel中 ...
- pygame判断鼠标左键_美商海盗船DarkCoreRGB Pro SE无线电竞鼠标评测
前言 经常使用无线鼠标的游戏玩家多少都经历过这样的苦恼,当你在游戏里激战正酣之时,忽然鼠标没电了.翻箱倒柜去找数据线或者备用鼠标也许只需要一两分钟,但这足以使之前积攒的大波优势付诸东流.所以我总是在想 ...
- JavaScript + Audio API自制简易音乐播放器(详细完整版、小白都能看懂)
JavaScript + Audio API自制简易音乐播放器(详细完整版) ** 音乐播放器的功能清单如下: ** 1.点击暂停按钮,歌曲暂停 2.点击播放按钮,歌曲播放 3.单曲循环与取消单曲循环 ...
- 什么击计算机窗口可以打开资源管理器,在win7中双击打开计算机和右击打开资源管理器有什么区别...
资源管理器是大家熟悉和常用的Windows文件查看和管理工具,和之前的Windows版本相比,Win7的资源管理器提供了更加丰富和方便的功能.不过今天我们想要重点关注的不是Win7资源管理器的功能,而 ...
最新文章
- 软测培训机构哪个比较好
- 关于bcg库记忆界面的问题及其解决办法
- 区域显示触发_天涯明月刀手游五行藏珍天机奇遇怎么触发?五行藏珍天机奇遇攻略...
- 【测试】RPA产品初体验
- Java序列化简单例子
- Kong 1.3发布,原生gRPC代理、上游TLS交叉认证
- [react] componentWillUpdate可以直接修改state的值吗
- %@include%和jsp:include的区别
- Netty入门笔记-I/O多路复用技术
- Openbiz 推进PHP进入大App Store时代
- java基础:13.2 集合框架 - LinkedList、Queue
- Alamofire源码解读系列(七)之网络监控(NetworkReachabilityManager)
- tomcat下部署activemq(转)
- python坦克大战小游戏,打包为exe文件
- python词云图生成简单实用
- Agilent E3649A via RS232 to PC 通信终于知道错哪了
- 身份证阅读器(读卡器)谷歌Chrome和火狐Firefox浏览器端网页开发接口控件分享
- 云锁安装Linux服务器云锁安装说明
- 金融IC卡非接触式快速支付的先天缺陷与补救措施
- Excel_软件介绍
热门文章
- html编写在线打字通,HTML5代码打字练习、HTML5案例 - 02
- Linux网络配置(NAT模式)
- Pyinstaller 打包Pyside2 报错qt.qpa.plugin
- 制作PPT如何快速绘制透视立体图
- 开源界的视频会议系统-FreeSWITCH
- 阵列卡直通模式和raid模式_服务器通过RAID也可以在线扩容?学会这些,你也可以...
- 一篇文章看懂自然语言处理——word表示技术的变迁(从bool模型到BERT)
- 010editor的破解
- 一、用于数据分析的Excel技巧
- 高等数学张宇18讲 第十七讲 三重积分、第一型曲线曲面积分