連點器
介紹
顧名思義,可以連續點的機器。
當然,連續可快可慢;機器意味着不許要人工點擊;可以是生活中的機器,也可以是電腦中的程序。
現在,連點器網上一搜一大堆,什么鼠標連點精靈,鼠大俠……不僅有電腦的,還有安卓系統的。
但是,用這些軟件,我很不放心。說不定就有什么木馬病毒呢……
再說,我們這些coder都不喜歡那些總是誤報的殺軟,測試程序時等了十幾秒結果彈出個“危險木馬程序”的警告,所以(我)在code時一般是不開360等殺軟的。
那怎么辦呢?
既然我們是coder,那么這種程序應該用我們的雙手親手寫下吧!(當然你要Ctrl+C&Ctrl+V我也沒辦法……)
Code0
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<iostream> 4 #include<windows.h> 5 using namespace std; 6 #define IL inline 7 #define RE register 8 9 POINT curpos;//鼠標的位置 10 float i;//點擊速度 11 int j;//點擊次數 12 int a=0,b=0;//貯存鼠標坐標 13 bool fast,inf; 14 15 IL void selectrate()//選擇點擊速度、次數 16 { 17 while(1) 18 { 19 system("cls"); 20 printf("由於windows的最小計時單位為毫秒,故輸入大於1000的數字將會被轉化為1000,輸入0會…會失去等待時間!\n請輸入點擊頻率 n 次/秒\n(0.01< n <=1000)\n"); 21 cin>>i; 22 if(i==0) fast=1; 23 i=(int)(1000/i); 24 printf("請輸入點擊次數 x 次\n( 0 暗示無限次)\n"); 25 cin>>j; 26 if(j==0) inf=1; 27 break; 28 } 29 } 30 31 IL void click(int i,int j) 32 { 33 while(1) 34 { 35 if(GetAsyncKeyState(VK_SPACE)) 36 { 37 RE int k=j; 38 if(inf) k=-1; 39 printf("運行\n"); 40 while(k--)//點擊次數 41 { 42 if(a&&b)SetCursorPos(a,b); 43 mouse_event(MOUSEEVENTF_LEFTDOWN,curpos.x,curpos.y,0,0); 44 mouse_event(MOUSEEVENTF_LEFTUP,curpos.x,curpos.y,0,0); 45 if(!fast) Sleep(i); 46 //鎖定目標位置 47 if(GetAsyncKeyState(VK_CONTROL)) 48 { 49 if(a&&b) 50 { 51 a=0;b=0; 52 printf("解除鎖定\n"); 53 } 54 else 55 { 56 GetCursorPos(&curpos); 57 a=(int)curpos.x; 58 b=(int)curpos.y; 59 printf("位置鎖定 %d %d\n",a,b); 60 } 61 } 62 if(GetAsyncKeyState(VK_SPACE)) 63 { 64 printf("暫停\n");Sleep(100); 65 //接收到信號才繼續執行 66 while(1) 67 { 68 if(GetAsyncKeyState(VK_SPACE)) 69 { 70 printf("繼續\n"); 71 break; 72 } 73 Sleep(100); 74 if(GetAsyncKeyState(VK_ESCAPE)) 75 { 76 printf("重新開始\n"); 77 return; 78 } 79 } 80 } 81 if(GetAsyncKeyState(VK_ESCAPE)) 82 { 83 printf("重新開始\n"); 84 return; 85 } 86 } 87 printf("按空格鍵再來一次\n"); 88 while(1) 89 { 90 if(GetAsyncKeyState(VK_SPACE)) break; 91 Sleep(200); 92 if(GetAsyncKeyState(VK_ESCAPE)) 93 { 94 printf("重新開始\n"); 95 return; 96 } 97 } 98 } 99 Sleep(250); 100 } 101 } 102 103 104 int main() 105 { 106 system("mode con cols=25 lines=10"); 107 system("title made by S.O.A.F"); 108 SetWindowPos(GetForegroundWindow(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 109 printf("自動窗口置頂\n空格鍵開始,暫停,繼續\nESC鍵重新開始\n4.點擊的位置為鼠標的位置。\nCTRL鍵鎖定,解鎖位置\n"); 110 111 while(1) 112 { 113 fast=inf=0; 114 system("pause"); 115 selectrate(); 116 system("cls"); 117 printf("頻率%.2f次/秒\n次數%d次\n空格鍵 開始 暫停 繼續\nESC鍵 重新開始\nCTRL鍵 鎖定 解鎖位置\n",1000/i,j); 118 click(i,j); 119 } 120 return 0; 121 }
這里有許多功能。
窗口置頂
鎖定位置
中途暫停
中途啟動
……
(但是效率不是特別高)
在我經過一番測試后,覺得許多功能都是沒必要的,就把他們刪了。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<iostream> 4 #include<windows.h> 5 using namespace std; 6 #define IL inline 7 #define RE register 8 POINT curpos;//鼠標的位置 9 int main() 10 { 11 float i;//點擊速度 12 bool fast,flag; 13 system("mode con cols=25 lines=10"); 14 system("title Code by S.O.A.F"); 15 SetWindowPos(GetForegroundWindow(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 16 printf("自動窗口置頂\n空格鍵開始,暫停,繼續\nESC鍵重新開始\n4.點擊的位置為鼠標的位置。\nCTRL鍵鎖定,解鎖位置\n"); 17 18 while(1) 19 { 20 fast=flag=0; 21 system("pause"); 22 system("cls"); 23 24 printf("由於windows的最小計時單位為毫秒,故輸入大於1000的數字將會被轉化為1000,輸入0會…會失去等待時間!\n請輸入點擊頻率 n 次/秒\n(0.01< n <=1000)\n"); 25 cin>>i; 26 if(i==0) fast=1; 27 else i=(int)(1000/i); 28 system("cls"); 29 30 printf("頻率%.2fHz\n空格鍵 開始\nESC鍵 重新開始\n",1000/i); 31 32 while(1)//等待空格觸發開始 33 { 34 if(GetAsyncKeyState(VK_SPACE)) 35 { 36 printf("開始運行\n"); 37 while(1) 38 { 39 if(!fast) Sleep(i); 40 mouse_event(MOUSEEVENTF_LEFTDOWN,curpos.x,curpos.y,0,0); 41 mouse_event(MOUSEEVENTF_LEFTUP,curpos.x,curpos.y,0,0); 42 if(GetAsyncKeyState(VK_ESCAPE)) 43 { 44 printf("重新開始\n"); 45 flag=1; 46 break; 47 } 48 } 49 } 50 if(GetAsyncKeyState(VK_ESCAPE)) 51 { 52 printf("end\n"); 53 flag=1; 54 } 55 if(flag) break; 56 } 57 58 } 59 return 0; 60 }
只有短短的六十行!
還把函數都涵蓋到主函數里面了。
反正,用來給釘釘直播刷贊應該夠了吧……
測試程序
那要是不刷贊無聊的時候,怎么來測試連點器的性能呢?
我又翻了翻mouse的一些函數,找到了mouse_event();
1 #include<windows.h> 2 #include<cstdio> 3 #include<iostream> 4 using namespace std; 5 6 7 int main() 8 { 9 HANDLE ConsoleWin; 10 INPUT_RECORD eventMsg; 11 DWORD Pointer ; 12 long long a=0; 13 ConsoleWin = GetStdHandle(STD_INPUT_HANDLE);//Get the console window 14 15 while(1){ 16 ReadConsoleInput(ConsoleWin, &eventMsg, 1, &Pointer);//Read input msg 17 if (eventMsg.EventType == MOUSE_EVENT && eventMsg.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) printf("%lld\n",++a); 18 } 19 return 0; 20 }
運行后,點一下控制台就會記錄+1。十分方便快捷!
(記得關閉“快速編輯模式”!)