• C++ 鼠标模拟程序


        关于鼠标模拟程序应用不算少见。在游戏外挂或者一些操作频繁位置确定的程序上应用往往有奇效。

        比較旧的API是mouse_event,本人一開始也用这个在搞,只是后来才看到新的API在操作上更加统一。稍作修改便也能模拟键盘输入(两者往往要一起应用)。所以就用新的API来做。对了,新的API名为SendInput。

        以下就不说废话了,直接上代码,本代码是执行在MFCproject上的,如要须要在控制台或者其它project上执行要包括必须的头文件。此外,本程序仅仅能模拟一般的鼠标操作,对于一些防外挂的程序进行点击须要驱动级的模拟。

        模拟鼠标各动作函数

    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();





  • 相关阅读:
    MySQL插入数据获得自动增长的ID
    C#解决“System.Threading.ThreadStateException:“在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试程序附加到该进程才会引发此异常”的异常
    C# 关闭当前窗体的时候打开另一个窗口
    C# WinForm中关闭指定的窗体
    MySQL 8.0 版本修改字符编码
    微信支付API v3接口使用应用篇
    Linux Tomcat安装篇(daemon运行,开机自启动)
    Linux nginx安装篇
    SpringCloud系列之Nacos+Dubbo+Seata应用篇
    SpringCloud系列之Nacos+Dubbo应用篇
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7039843.html
Copyright © 2020-2023  润新知