模擬鼠標操作的C++實現代碼

jopen 9年前發布 | 5K 次閱讀 C/C++

  關于鼠標模擬程序應用不算少見,在游戲外掛或者一些操作頻繁位置確定的程序上應用往往有奇效。

    比較舊的API是mouse_event,本人一開始也用這個在搞,不過后來才看到新的API在操作上更加統一,稍作改動便也能模擬鍵盤輸入(兩者往往要一起應用),所以就用新的API來做。對了,新的API名為SendInput。

    下面就不說廢話了,直接上代碼,本代碼是運行在MFC工程上的,如要需要在控制臺或者其他工程上運行要包含必須的頭文件。此外,本程序只能模擬一般的鼠標操作,對于一些防外掛的程序進行點擊需要驅動級的模擬。

    模擬鼠標各動作函數

    void MouseMove(int x, int y)//鼠標移動到指定位置
{
double fScreenWidth = ::GetSystemMetrics(SM_CXSCREEN) - 1;//獲取屏幕分辨率寬度
double fScreenHeight = ::GetSystemMetrics(SM_CYSCREEN) - 1;//獲取屏幕分辨率高度
double fx = x(65535.0f / fScreenWidth);
double fy = y
(65535.0f / fScreenHeight);
INPUT Input = { 0 };
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
Input.mi.dx = fx;
Input.mi.dy = fy;
SendInput(1, &Input, sizeof(INPUT));
}

void MouseLeftDown()//鼠標左鍵按下  
{  
    INPUT  Input = { 0 };  
    Input.type = INPUT_MOUSE;  
    Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;  
    SendInput(1, &Input, sizeof(INPUT));  
}  

void MouseLeftUp()//鼠標左鍵放開  
{  
    INPUT  Input = { 0 };  
    Input.type = INPUT_MOUSE;  
    Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;  
    SendInput(1, &Input, sizeof(INPUT));  

}  

void MouseRightDown()//鼠標右鍵按下  
{  
    INPUT  Input = { 0 };  
    Input.type = INPUT_MOUSE;  
    Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;  
    SendInput(1, &Input, sizeof(INPUT));  
}  

void MouseRightUp()//鼠標右鍵放開  
{  
    INPUT  Input = { 0 };  
    Input.type = INPUT_MOUSE;  
    Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;  
    SendInput(1, &Input, sizeof(INPUT));  
}  </pre> 


  各動作函數配合完成鼠標各種操作

//模擬鼠標拖動框選  
ShowWindow(SW_SHOWMINIMIZED);//窗體最小化  
POINT mypoint;  
GetCursorPos(&mypoint);//獲取鼠標當前所在位置  
MouseMove(800, 1000);//鼠標移動到指定位置  
MouseLeftDown();//鼠標左鍵點下  
MouseMove(10, 10);//鼠標拖動到指定位置  
Sleep(10);//這里需要等待一下,不然拖動會沒有效果  
MouseLeftUp();//鼠標釋放  
MouseMove(mypoint.x, mypoint.y);//將鼠標放回所在的位置

    //模擬鼠標右鍵按下并釋放  
    ShowWindow(SW_SHOWMINIMIZED);//窗體最小化  
    MouseRightDown();  
    Sleep(10);  
    MouseRightUp();  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!