cpp 模拟windows鼠标移动(带移动过程)

⌚Time: 2022-09-17 13:36:51

👨‍💻Author: Jack Ge

实现代码


#include "stdafx.h"

#include <Windows.h>



//pos_x pos_y移动的目的坐标 speed 速度 (0 - 100)

void move_mouse(int pos_x,int pos_y,int speed = 80){

    int cx_screen = ::GetSystemMetrics(SM_CXSCREEN); 

    int cy_screen = ::GetSystemMetrics(SM_CYSCREEN);  

    for(int i = 0;;i++){

            POINT point;

            //获取鼠标当前位置

            GetCursorPos(&point);

            //指定每次移动距离

            int x_move = pos_x - point.x;

            int y_move = pos_y - point.y;

            if(x_move > 10){

                x_move = 10;

            }

            if(x_move < -10){

                x_move = -10;

            }

            if(y_move > 10){

                y_move = 10;

            }

            if(y_move < -10){

                y_move = -10;

            }

            INPUT input;

            input.type = INPUT_MOUSE;

            input.mi.dx = x_move;

            input.mi.dy = y_move;

            input.mi.mouseData = 0;

            input.mi.dwFlags =  MOUSEEVENTF_MOVE;

            input.mi.time = 0;

            input.mi.dwExtraInfo = 0;

            SendInput(1,&input,sizeof(INPUT));



            //判断是否移动到终点

            if((pos_x - point.x< 10&&pos_x - point.x>- 10)&&(pos_y - point.y< 10&&pos_y - point.y>- 10)){

                INPUT input;

                input.type = INPUT_MOUSE;

                input.mi.dx = pos_x-point.x ;

                input.mi.dy = pos_y-point.y;

                input.mi.mouseData = 0;

                input.mi.dwFlags =  MOUSEEVENTF_MOVE;   //MOUSEEVENTF_ABSOLUTE 代表决对位置  MOUSEEVENTF_MOVE代表移动事件

                input.mi.time = 0;

                input.mi.dwExtraInfo = 0;

                SendInput(1,&input,sizeof(INPUT));

                break;

            }



            Sleep(100 - speed);

    }





}

int _tmain(int argc, _TCHAR* argv[])

{

    int x,y;

    printf("输入目的x  y坐标:");

    scanf_s("%d %d",&x,&y);

    //scanf("%d %d",&x,&y);

    move_mouse(x,y);

    return 0;

}