## 实际运用,视频讲解
视频传送门:[点我]
## 相关环境
操作系统:Win10 企业版 编译环境:MinGW
## 相关说明
参考资料:[windows API](http://www./t/api/index.html?web.htm),里面很详细,爱死了 使用的Windows API中的 **mouse_event()** 和 **keybd_event()**。
### mouse_event
private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
![](http://image109.360doc.com/DownloadImg/2021/04/1105/219784786_1_202104110516483) 简单写个实例,参考 [mouse_event() 控制鼠标操作](https://blog.csdn.net/hellokandy/article/details/94031796)
```cpp #include <Windows.h> 1、这里是鼠标左键按下和松开两个事件的组合即一次单击: mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
2、模拟鼠标右键单击事件: mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )
3、两次连续的鼠标左键单击事件 构成一次鼠标双击事件: mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
4、使用绝对坐标 mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0 ) 需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点。
5、直接设定绝对坐标并单击 mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 屏幕宽, Y * 65536 / 屏幕高, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 屏幕宽, Y * 65536 / 屏幕高, 0, 0); 其中X,Y分别是你要点击的点的横坐标和纵坐标 ps:求屏幕大小,参考 https://blog.csdn.net/yp18792574062/article/details/88351342
#include <Windows.h> // 带标题栏和菜单栏 int width = GetSystemMetrics(SM_CXSCREEN); int height = GetSystemMetrics(SM_CYSCREEN); ```
## keybd_event
```cpp VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo); ```
![](http://image109.360doc.com/DownloadImg/2021/04/1105/219784786_2_20210411051648159) 下图转自:[keybd_event模拟键盘输入](https://blog.csdn.net/polyhedronx/article/details/81988948)
![](http://image109.360doc.com/DownloadImg/2021/04/1105/219784786_3_20210411051648332) 简单实例
```cpp #include <Windows.h> keybd_event(16,0,0,0);//按下Shift键 keybd_event('A',0,0,0);//按下a键 keybd_event('A',0,KEYEVENTF_KEYUP,0);//松开a键 keybd_event(16,0,KEYEVENTF_KEYUP,0);//松开Shift键 ```
## 实际案例
实现效果:来回走动,并按 'q’键。ps:**管理员运行** main.cpp
```cpp // 编译 g++ main.cpp,管理员运行 a.exe #include <Windows.h> #include <iostream> using namespace std;
int main() { // 获取带标题栏和菜单栏即全屏像素大小 int width = GetSystemMetrics(SM_CXSCREEN); int height = GetSystemMetrics(SM_CYSCREEN); // 睡眠5s,准备时间 Sleep(5000); // 死循环 while (1) { // 移动到绝对位置右击 mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP | MOUSEEVENTF_MOVE, 1170 * 65535 / width, 362 * 65535 / height, 0, 0 ); Sleep(3500);
// 按下'q'键 keybd_event(81, 0, 0, 0); keybd_event(81, 0, KEYEVENTF_KEYUP, 0); Sleep(500);
// 移动到绝对位置右击 mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP | MOUSEEVENTF_MOVE, 679 * 65535 / width, 760 * 65535 / height, 0, 0 ); Sleep(3500);
}
//system('pasue'); return 0; } ```
### 获取鼠标当前位置
```cpp #include <Windows.h> #include <iostream> using namespace std;
int main() { // 死循环 while (1) { POINT pt = {0,0}; GetCursorPos(&pt); printf('x=%d,y=%d\n', pt.x,pt.y); Sleep(3000); }
//system('pasue'); return 0; } ```
|