C++ 鼠标模拟程序
2015-06-12 12:33
267 查看
关于鼠标模拟程序应用不算少见,在游戏外挂或者一些操作频繁位置确定的程序上应用往往有奇效。
比较旧的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);//将鼠标放回所在的位置
比较旧的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();
相关文章推荐
- vs中c、c++屏蔽警告
- C/C++文件读取报错:stack around the variable 'x' was corrupted.
- [C++] MyList<T>
- 【C++】STL队列和栈的使用
- C/C++获取windows进程路径的方法
- c++异常处理机制示例及讲解
- C# base 和 C++ __super
- 【C语言】C语言动态分配内存
- c++ & * 符号的多重含义
- C++ string 字符串 知识点 小结
- 【高级算法】Lasvegas算法解决3SAT问题(C++实现代码)
- C++【操作符重载】
- C++文件操作详解
- Microsoft Visual C++ Runtime Library Runtime Error解决的方式
- Visual Studio 2013简单运行一个C++程序
- c语言实现BMP图像转换为灰度图
- C、C++写二进制数据到mysql的Blob字段/插入images
- c++ 实现结构体单链表的 创建 插入 删除等操作
- Java && C++
- 何为C语言关键字volatile