C++自作釘生放送ブラシ(二)

21609 ワード

前回の釘付けブラシは本当に人気がありましたが、特別な時期のせいか...
しかし、このプログラムはまだ不足しています!!
友人の強い要望で、途中キャンセル機能を追加しました.それともソース:
#include 
#include 
#include 
#include 
#include 
#include 
#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;
POINT pt,pt2; //     
LONG maxDsc=30; //         
 SetConsoleTitle("     ");
 SetSize(35,20); 
 flush:
 ch=IDOK; //   do-while ↓
 while(FindWindow("StandardFrame",NULL) == NULL && ch == IDOK){
  ch = MessageBox(GetConsoleWindow(),"          。
。"
," ",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<<"
(1~1000)!
"
; } }while(speed < 1 || speed > 1000); do { cout<<"
:"
; cin>>n; if(n < 0){ cout<<"
(>0)!
"
; } }while(n < 0); cout<<"



...
"
; Sleep(3000); i=0; 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 * 5) % 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<<"

?( 1: /0: ) "
; int ch2; againp: ch2=getch(); switch(ch2) { case '1': cout<<endl; system("cls"); goto flush; break; case '0': exit(0); break; default: goto againp; break; } return 0; }

私は中にマウスの座標を検出する差値を加えて、デバッグした30が最適値です.キャンセル方法:簡単です.もうブラシをかけたくないときはマウスを強く動かすだけでいいです.
(警告:決して左に移動しないで、「連麦申請」ボタンを押さないで!!!アップグレード版ダウンロードアドレス:https://download.csdn.net/download/cjz2005/12188130