分享

C 模拟鼠标点击和键盘输入的操作 mouse

 觅书时代 2021-04-11

实际运用,视频讲解

python和C++实现模拟键鼠操作实测说明【300英雄】

视频传送门:点我

相关环境

操作系统:Win10 企业版
编译环境:MinGW

相关说明

参考资料:windows API,里面很详细,爱死了
使用的Windows API中的 mouse_event()keybd_event()

mouse_event

private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
在这里插入图片描述
简单写个实例,参考 mouse_event() 控制鼠标操作

#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,用00表示,这函数认为是当前鼠标所在的点。 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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

keybd_event

VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);
  • 1
  • 1

在这里插入图片描述
下图转自:keybd_event模拟键盘输入
在这里插入图片描述
简单实例

#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键
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

实际案例

实现效果:来回走动,并按 'q’键。ps:管理员运行
main.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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

获取鼠标当前位置

#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('pause'); return 0; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多