Mouse Clicker v8.0 Beta
By Haozexu
At 2022/8/12 20:16
原创程序,转载请注明出处。
LICENSE:GPL 3.0
MouseClicker v8.0 Copyright (C) 2022 haozexu
项目地址
更新日志 Update Log
- 修复mode 3
- 添加无限连点
- 添加区间连点模式
- 增强用户体验
- 测试:长按模式
专用更新器
您也可以上Gitee去自己下载安装包
- 使用安装器时,请用管理员方式启动。
- 如果要自己编译,记得添加链接器选项 -lurlmon -lwininet
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
using namespace std;
DWORD slp=10;
int mode=1;
long long cs=0;
long long x,y,sx,sy,ex,ey,tot,onoff=1,utim[1000005],whl[1000005];
tagPOINT rec[1000005];bool lr[1000005],lrp=1,hide=0,top=0;
long long getrnd(long long a,long long b){
if(a>b) swap(a,b);
return rand() % (b-a+1)+ a;
}
char *word[9]={"","连续点击","点一次附带几次","固定位置点击","固定次数点击","随机范围点击","鼠标录制模式","固定区域开关","长按模式"};
int main(){
system("title Mouse Clicker v7.0 -by Haozexu");
printf("Mouse Clicker v7.0\n按ESC开始连点\n按左SHIFT停止连点\n按右SHIFT打开设置\n");
while(1){
if(GetKeyState(VK_ESCAPE)<0){
printf("正在使用连点模式[%s].",word[mode]);
if(hide){
SetWindowPos(GetConsoleWindow(),HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_HIDEWINDOW);
}
switch(mode){
case 1:
while(1){
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
if(GetKeyState(VK_LSHIFT)<0) break;
Sleep(slp);
}
break;
case 2:
while(1){
if(GetKeyState(VK_LSHIFT)<0) break;
if(GetKeyState(VK_LBUTTON)<0){
for(long long i=1;i<=cs;i++){
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
if(GetKeyState(VK_LSHIFT)<0) break;
Sleep(slp);
}
}
if(GetKeyState(VK_RBUTTON)<0){
for(long long i=1;i<=cs;i++){
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
if(GetKeyState(VK_LSHIFT)<0) break;
Sleep(slp);
}
}
}
break;
case 3:
for(long long i=1;i<=cs||cs==-1;i++){
if(GetKeyState(VK_LSHIFT)<0) break;
SetCursorPos(x,y);
if(lrp){
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}else{
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}
if(GetKeyState(VK_LSHIFT)<0) break;
Sleep(slp);
}
break;
case 4:
for(long long i=1;i<=cs||cs==-1;i++){
if(GetKeyState(VK_LSHIFT)<0) break;
if(lrp){
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}else{
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}
if(GetKeyState(VK_LSHIFT)<0) break;
Sleep(slp);
}
break;
case 5:
srand(time(NULL));
for(long long i=1;i<=cs||cs==-1;i++){
if(GetKeyState(VK_LSHIFT)<0) break;
SetCursorPos(getrnd(sx,ex),getrnd(sy,ey));
if(lrp){
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}else{
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}
if(GetKeyState(VK_LSHIFT)<0) break;
Sleep(slp);
}
break;
case 6:
for(long long i=1;i<=cs||cs==-1;i++){
bool flg=0;
for(int j=1;j<=tot;j++){
if(GetKeyState(VK_LSHIFT)<0){
flg=1;
break;
}
SetCursorPos(rec[j].x,rec[j].y);
if(lr[i]){
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Sleep(utim[j]+cs);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}else{
if(GetKeyState(VK_LSHIFT)<0) break;
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
Sleep(utim[j]+cs);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}
if(GetKeyState(VK_LSHIFT)<0) break;
Sleep(slp);
}
if(flg) break;
}
break;
case 7:
while(1){
if(GetKeyState(VK_LSHIFT)<0) break;
POINT pt;
GetCursorPos(&pt);
if(onoff){
if((sx<=pt.x&&pt.x<=ex&&sy<=pt.y&&pt.y<=ey)){
if(GetKeyState(VK_LSHIFT)<0) break;
if(lrp){
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}else{
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}
}
}else{
if(!(sx<=pt.x&&pt.x<=ex&&sy<=pt.y&&pt.y<=ey)){
if(GetKeyState(VK_LSHIFT)<0) break;
if(lrp){
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}else{
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}
}
}
if(GetKeyState(VK_LSHIFT)<0) break;
Sleep(slp);
}
case 8:
if(lrp){
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
}else{
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
}
while(1){
if(GetKeyState(VK_LSHIFT)<0) break;
Sleep(slp);
}
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
break;
default:
printf("未定义的模式!\n");
system("pause");
break;
}
if(hide){
SetWindowPos(GetConsoleWindow(),HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
if(top) SetWindowPos(GetConsoleWindow(),HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
}
system("cls");
printf("Mouse Clicker v7.0\n按ESC开始连点\n按左SHIFT停止连点\n按右SHIFT打开设置\n");
}
if(GetKeyState(VK_RSHIFT)<0){
printf("窗口大小?(单位像素,输入-1 -1表示不做修改)");
long long clx,cly;
cin>>clx>>cly;
if(!(clx==cly&&clx==-1)){
if(clx<0||cly<0){
printf("大小太小!");
system("pause");
}else{
SetWindowPos(GetConsoleWindow(),HWND_TOPMOST,0,0,clx,cly,SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
}
}
printf("连点时自动隐藏窗口?(y/ANYKEY)");
char ch;cin>>ch;
if(ch=='y'){
hide=1;
}else hide=0;
printf("窗口置顶?(y/ANYKEY)");
cin>>ch;
if(ch=='y'){
top=1;
SetWindowPos(GetConsoleWindow(),HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
}else{
top=0;
SetWindowPos(GetConsoleWindow(),HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
}
printf("两次连点之间的时间间隔[单位精确到ms]?");
int sl;cin>>sl;
if(sl<10){
printf("间隔太小!\n");
system("pause");
system("cls");
printf("Mouse Clicker v7.0\n按ESC开始连点\n按左SHIFT停止连点\n按右SHIFT打开设置\n");
continue;
}
printf("-----模式清单-----\n");
printf("序号 描述\n");
for(int i=1;i<=8;i++){
printf("%d %s\n",i,word[i]);
}
printf("模式?");
cin>>mode;long long lx,ly;
int cx,cy;
switch(mode){
case 1:
break;
case 2:
printf("点一次附带几次(特别地,-1表示无限制)?");
cin>>cs;
if(cs<-1){
cs=0;
printf("次数不可为负数!\n");
system("pause");
break;
}
break;
case 3:
printf("在哪里点击(x,y格式;特别地,输入-1 -1来表示在当前位置点击)?");
cin>>lx>>ly;
if(lx==ly&&lx==-1){
POINT pos;
GetCursorPos(&pos);
lx=x=pos.x;ly=y=pos.y;
}
cx=GetSystemMetrics(SM_CXSCREEN);
cy=GetSystemMetrics(SM_CYSCREEN);
if(lx<0||ly<0||lx>cx||ly>cy){
printf("超出屏幕边界!\n您的屏幕大小为%d*%d\n",cx,cy);
system("pause");
break;
}
x=lx,y=ly;
printf("固定点击几次(特别地,-1表示无限制)?");
cin>>cs;
if(cs<-1){
cs=0;
printf("次数不可为负数!\n");
system("pause");
break;
}
printf("左/右键?[l,ANYKEY]");
cin>>ch;
if(ch=='l') lrp=1;
else lrp=0;
break;
case 4:
printf("固定点击几次(特别地,-1表示无限制)?");
cin>>cs;
if(cs<-1){
cs=0;
printf("次数不可为负数!\n");
system("pause");
break;
}
printf("左/右键?[l,ANYKEY]");
cin>>ch;
if(ch=='l') lrp=1;
else lrp=0;
break;
case 5:
printf("要在哪个区域内随机?\n");
printf("输入左上起始点的xy坐标(特别地,输入-1 -1表示使用当前鼠标位置)");
cin>>lx>>ly;
if(lx==ly&&lx==-1){
POINT pos;
GetCursorPos(&pos);
lx=sx=pos.x;ly=sy=pos.y;
}
cx=GetSystemMetrics(SM_CXSCREEN);
cy=GetSystemMetrics(SM_CYSCREEN);
if(lx<0||ly<0||lx>cx||ly>cy){
printf("超出屏幕边界!\n您的屏幕大小为%d*%d\n您的输入%d*%d\n",cx,cy,sx,sy);
system("pause");
break;
}
sx=lx,sy=ly;
printf("输入右下结束点的xy坐标(特别地,输入-1 -1表示使用当前鼠标位置)");
cin>>lx>>ly;
if(lx==ly&&lx==-1){
POINT pos;
GetCursorPos(&pos);
lx=ex=pos.x;ly=ey=pos.y;
}
cx=GetSystemMetrics(SM_CXSCREEN);
cy=GetSystemMetrics(SM_CYSCREEN);
if(lx<0||ly<0||lx>cx||ly>cy){
printf("超出屏幕边界!\n您的屏幕大小为%d*%d\n您的输入%d*%d\n",cx,cy,ex,ey);
system("pause");
break;
}
ex=lx,ey=ly;
printf("固定点击几次(特别地,-1表示无限制)?");
cin>>cs;
if(cs<-1){
cs=0;
printf("次数不可为负数!\n");
system("pause");
break;
}
printf("左/右键?[l,ANYKEY]");
cin>>ch;
if(ch=='l') lrp=1;
else lrp=0;
if(sx>ex) swap(sx,sy);
if(sy>ey) swap(sy,ey);
printf("您的范围(%d,%d)-(%d,%d)\n",sx,sy,ex,ey);
system("pause");
break;
case 6:
printf("按ESC开始录制[仅支持左右键录制]\n");
while(1){
if(GetKeyState(VK_ESCAPE)<0) break;
}
tot=0;
printf("按左SHIFT停止录制[按鼠标左/右键记录一个点]");
while(1){
if(GetKeyState(VK_LSHIFT)<0) break;
if(GetKeyState(VK_LBUTTON)<0){
POINT pos;GetCursorPos(&pos);
rec[++tot].x=pos.x;
rec[tot].y=pos.y;
lr[tot]=1;
while(GetKeyState(VK_LBUTTON)&0x8000){
utim[tot]++;
Sleep(1);
}
}
if(GetKeyState(VK_RBUTTON)<0){
POINT pos;GetCursorPos(&pos);
rec[++tot].x=pos.x;
rec[tot].y=pos.y;
lr[tot]=0;
while(GetKeyState(VK_RBUTTON)&0x8000){
utim[tot]++;
Sleep(1);
}
}
Sleep(10);
if(tot>1000000){
printf("记录达上限!\n");
MessageBox(0,"记录达上限!","Mouse Clicker v7.0 提示",MB_OK);
system("pause");
break;
}
}
printf("---记录---\n");
for(int i=1;i<=tot;i++){
cout<<rec[i].x<<" "<<rec[i].y<<" "<<" "<<utim[i]<<" "<<lr[i]<<endl;
}
printf("\n重复做几次(特别地,-1表示无限制)?");
cin>>cs;
if(cs<-1){
cs=0;
printf("次数不可为负数!\n");
system("pause");
break;
}
break;
case 7:
printf("要在哪个区域内点击?\n");
printf("输入左上起始点的xy坐标(特别地,输入-1 -1表示使用当前鼠标位置)");
cin>>lx>>ly;
if(lx==ly&&lx==-1){
POINT pos;
GetCursorPos(&pos);
lx=sx=pos.x;ly=sy=pos.y;
}
cx=GetSystemMetrics(SM_CXSCREEN);
cy=GetSystemMetrics(SM_CYSCREEN);
if(lx<0||ly<0||lx>cx||ly>cy){
printf("超出屏幕边界!\n您的屏幕大小为%d*%d\n您的输入%d*%d\n",cx,cy,sx,sy);
system("pause");
break;
}
sx=lx,sy=ly;
printf("输入右下结束点的xy坐标(特别地,输入-1 -1表示使用当前鼠标位置)");
cin>>lx>>ly;
if(lx==ly&&lx==-1){
POINT pos;
GetCursorPos(&pos);
lx=ex=pos.x;ly=ey=pos.y;
}
cx=GetSystemMetrics(SM_CXSCREEN);
cy=GetSystemMetrics(SM_CYSCREEN);
if(lx<0||ly<0||lx>cx||ly>cy){
printf("超出屏幕边界!\n您的屏幕大小为%d*%d\n您的输入%d*%d\n",cx,cy,ex,ey);
system("pause");
break;
}
ex=lx,ey=ly;
printf("固定点击几次(特别地,-1表示无限制)?");
cin>>cs;
if(cs<-1){
cs=0;
printf("次数不可为负数!\n");
system("pause");
break;
}
printf("左/右键?[l,ANYKEY]");
cin>>ch;
if(ch=='l') lrp=1;
else lrp=0;
if(sx>ex) swap(sx,sy);
if(sy>ey) swap(sy,ey);
printf("您的范围(%d,%d)-(%d,%d)\n",sx,sy,ex,ey);
printf("在范围内开启/关闭(o/ANYKEY)?");
cin>>ch;
if(ch=='o'){
onoff=1;
}else{
onoff=0;
}
break;
case 8:
printf("左/右键?[l,ANYKEY]");
cin>>ch;
if(ch=='l') lrp=1;
else lrp=0;
break;
default:
printf("模式不存在!\n");
system("pause");
break;
}
slp=sl;
system("cls");
printf("Mouse Clicker v7.0\n按ESC开始连点\n按左SHIFT停止连点\n按右SHIFT打开设置\n");
}
}
}
Bug & Feature
请发在评论区
或者Pull Issues
Others
点个赞吧。\(QwQ\)
标签:ch,v7.0,pos,cy,MouseClicker,printf,lx,ly From: https://www.cnblogs.com/haozexu/p/17488422.html