C++自创钉钉直播刷赞器(二)

上次的钉钉刷赞器真的很受大家欢迎,可能是因为特殊时期的原因…

但此程序还是有不足!!

在我朋友的强烈要求下,我添加了半途取消功能。
还是上源码:

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <cmath>
#include <iostream>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)& 0x8000 ?1:0))
using namespace std;
void SetSize(unsigned uCol,unsigned uLine)
{
 char cmd[64];
 sprintf(cmd,"mode con cols=%d lines=%d",uCol,uLine);
 system(cmd);
}
template <typename _T>
_T pow2(_T x)
{
    return x * x;
}
DOUBLE Distance(POINT &a,POINT &b) //两点之间的距离 
{
 return sqrt(pow2(a.x - b.x) + pow2(a.y - b.y));
}
VOID KeyPR(BYTE bVk) { //Press && Release
 keybd_event(bVk,0,0,0);
 keybd_event(bVk,0,2,0);
}
VOID Click()
{
 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
int main()
{
    int i=0;
 int n=100;  //次数 
 int speed=64; //每秒赞数 
 int ch;
 bool bAgain=false;
POINT pt,pt2; //鼠标坐标 
LONG maxDsc=40; //鼠标偏移极限距离 
 SetConsoleTitle("钉钉刷赞器");
 SetSize(35,20); 
 while(true)
 {
 ch=IDOK; //懒得用do-while了↓
 while(FindWindow("StandardFrame",NULL) == NULL && ch == IDOK){
  ch = MessageBox(GetConsoleWindow(),"没有打开钉钉直播窗口。\n请先打开然后按确定。","提示",MB_ICONEXCLAMATION|MB_OKCANCEL);
 }
 if(ch == IDCANCEL || ch == IDCLOSE)
 {
  cout<<"已取消...";
  Sleep(500);
  exit(0);
 }
 do
 {
  cout<<"输入每秒赞数(1~1000):";
  cin>>speed;
  if(speed < 1 || speed > 1000){
     cout<<"\n不符合范围(1~1000)!\n";
        }
 }while(speed < 1 || speed > 1000);
 do
 {
  cout<<"\n输入次数:";
  cin>>n;
  if(n < 0){
     cout<<"\n不符合范围(>0)!\n";
        }
 }while(n < 0);
 cout<<"\n\n准备就绪。\n马上隐藏此窗口,几秒后\n请在赞上单击鼠标开始刷赞...\n";
 Sleep(3000);
 ShowWindow(GetConsoleWindow(),SW_HIDE);
 if(FindWindow("Msgbox",NULL) != NULL)
     KeyPR(VK_SPACE);
 Sleep(1000);
 while(!KEY_DOWN(MOUSE_MOVED));
GetCursorPos(&pt);
  do{
   if(FindWindow("Msgbox",NULL) == NULL)
      Click();
        else
      KeyPR(VK_SPACE);
   Sleep((DWORD)1000.0 / speed);
   i++;
   if(i % speed == 0) //每秒检测鼠标一次 
        {
         GetCursorPos(&pt2); //再取一次 
         if(Distance(pt,pt2) > maxDsc)
    { //临时取消
   //就不跳出控制台了,直接退出,这样安全。:)
    exit(-1); 
    } 
  }
  }while(i <= n);
  Sleep(1000);
  if(FindWindow("Msgbox",NULL) != NULL)
     KeyPR(VK_SPACE);
     ShowWindow(GetConsoleWindow(),SW_SHOW);
     cout<<"\n刷赞成功!\n是否继续?(按 1:是/0:否) ";
     int ch2;
     againp:
     ch2=getch();
     switch(ch2)
     {
      case '1':
   bAgain=true;
   cout<<endl;
   system("cls");
   break;
      case '0':
   bAgain=false;
   break;
      default:
   goto againp;
   break;
  }
  
     }while(bAgain);
  return 0;
} 

我在里面加了检测鼠标坐标算差值,经调试40 px为最佳值.
取消方法:
很简单,不想再刷时把鼠标狠狠一移就行了。

(警告:千万不要向左移,不要按到“申请连麦”按钮!!!!)

发布了10 篇原创文章 · 获赞 3 · 访问量 2483

猜你喜欢

转载自blog.csdn.net/cjz2005/article/details/104433443