1. 程式人生 > >C++用API實現滑鼠帶軌跡移動

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