| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

模拟鼠标操作的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));        }  

  各动作函数配合完成鼠标各种操作
//模拟鼠标拖动框选    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();