C++用API實現滑鼠帶軌跡移動
void Contra(int dual_X,int dual_Y); //帶軌跡移動滑鼠 int More(int mini,int maxi); //生成隨機數 int More(int mini,int maxi) //生成隨機數函式 { //引數:1.區間最小值;2.區間最大值 srand((unsigned)time(NULL)); //初始化隨機數種子 int impo=mini+rand()%(maxi-mini+1); return impo; } void Contra(int dual_X,int dual_Y) //有軌跡移動滑鼠 { //引數:1.目的地X座標 2.目的地Y座標 double goverX=0,goverY=0; //軌跡X,Y double factuX=1,factuY=1; //當前滑鼠座標 double problem_X=double(dual_X),problem_Y=double(dual_Y); //目的地座標 double used=0; int always=0;//移動次數 int Priya=0; //隨機次數 int Shah=More(16,20); //移動步長 int own=1; //移動延時 int ShahX=0,ShahY=0; //移動偏差X,移動偏差Y CString Kara; POINT Paid; //宣告一個結構存放滑鼠當前X Y座標 GetCursorPos(&Paid); //獲取滑鼠當前位置 factuX=double(Paid.x);//把當前滑鼠座標轉換成雙浮點數 factuY=double(Paid.y); if (abs(factuX-problem_X)>abs(factuY-problem_Y)) { used=abs(factuX-problem_X); } else { used=abs(factuY-problem_Y); } goverX=(problem_X-factuX)/used; //軌跡X goverY=(problem_Y-factuY)/used; //軌跡Y while(factuX!=problem_X || factuY!=problem_Y) { always++;//移動次數 factuX=factuX+goverX; //當前X座標+軌跡X factuY=factuY+goverY; //當前Y座標+軌跡Y if (always==Shah) //移動次數==移動步長 { always=0; //移動次數 Priya++; //隨機次數 Shah=More(16,20); //移動步長 own=More(3,6); //移動延時 if (Priya==4) { //每執行5次就隨機產生一個隨機偏差軌跡,模擬手動移動軌跡 ShahX=More(-12,12); //移動偏差X ShahY=More(-9,9); //移動偏差Y Priya=0; //隨機次數 } int metics_X=int(factuX); //把算出來的座標轉換為整數 int metics_Y=int(factuY); SetCursorPos(metics_X+ShahX,metics_Y+ShahY); //任意移動滑鼠的API也可以是驅動鍵盤 Sleep(own); //隨機延遲 } if (abs(factuX-problem_X)<=Shah && abs(factuY-problem_Y)<=Shah) { SetCursorPos(dual_X,dual_Y); //移動到終點附近後直接移動到終點 //任意移動滑鼠的API也可以是驅動鍵盤 break; } } }
按鍵精靈版
範例1:
Call 帶軌跡滑鼠移動(1540,147)
Function 帶軌跡滑鼠移動(x1,y1)
GetCursorPos x2, y2
If x1 <> x2 or y1 <> y2 Then //<> --為不等於號
For x = x2 To x1 Step Sgn(x1 - x2)
MoveTo x, (y1+(y2-y1)*(x-x1)/(x2-x1))
Next
End If
End Function
按鍵精靈Sgn 函式:
描述
返回表示數字符號的整數。
語法
Sgn(number)
number 引數可以是任意有效的數值表示式。
返回值:
gn 函式有如下返回值:
如果 number 為 Sgn 返回
大於零 1
等於零 0
小於零 -1
範例2:
x1 = 17 : y1 = 25
GetCursorPos x, y //滑鼠當前x y座標
If abs(x - x1) > abs(y - y1) Then
cs = abs(x - x1)
Else
cs = abs(y - y1)
End If
軌跡x = (x1 - x) / cs : 軌跡y = (y1 - y) / cs
Randomize
移動次數 = 0 : 隨機次數 = 0 : 移動步長 = Int((20 - 16 + 1) * Rnd + 16)
While x <> x1 Or y <>y1
移動次數 = 移動次數 + 1
x = x + 軌跡x : y = y + 軌跡y
If 移動次數 = 移動步長 Then
Randomize
移動次數 = 0 : 隨機次數 = 隨機次數 + 1 : 移動步長 = Int((20 - 16 + 1) * Rnd + 16) : 移動延時 = Int((6 - 3 + 1) * Rnd + 3)
If 隨機次數 = 4 Then
移動偏差x = Int((12 + 12 + 1) * Rnd - 12) : 移動偏差y = Int((9 + 9 + 1) * Rnd - 9) : 隨機次數 = 0
End If
MoveTo x + 移動偏差x, y + 移動偏差y
Delay 移動延時
ElseIf abs(x - x1) <= 移動步長 and abs(y - y1) <= 移動步長 Then
MoveTo x1, y1
break
End If
Wend