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