我是靠谱客的博主 漂亮钻石,最近开发中收集的这篇文章主要介绍C++模拟鼠标点击和键盘输入的操作 mouse_event & keybd_event实际运用,视频讲解相关环境相关说明实际案例补充,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
实际运用,视频讲解
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,用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
VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);
下图转自: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键
实际案例
实现效果:来回走动,并按 ‘q’键。ps:管理员运行
main.cpp,编译直接 gcc 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;
}
获取鼠标当前位置(绝对坐标)
#include <Windows.h>
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
// 死循环
while (1)
{
POINT pt = {0,0};
GetCursorPos(&pt);
printf("x=%d,y=%dn", pt.x,pt.y);
Sleep(3000);
}
//system("pause");
return 0;
}
补充
FindWindow + SendMessage 向QQ聊天框循环发送消息
消息参考:
SendMessage消息种类大全
SendMessage函数的常用消息及其应用大全
效果图
1.cpp
// 编译 g++ main.cpp,管理员运行 a.exe
#include <Windows.h>
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
// 窗口名,打开任务管理器,查看名称
char win_name[100];
printf("请输入窗口名:");
scanf("%s", win_name);
HWND win = FindWindow(NULL, win_name);
if(0 == win)
{
printf("获取窗口句柄失败n");
return 0;
}
// 循环次数
int i = 0;
printf("请输入发送次数:");
scanf("%d", &i);
int x = 0, y = 0;
// 循环
while(i--)
{
x = 370;
y = 550;
// (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
// lParam中 高位为y左移16位,低位为x,相对坐标
SendMessage(win, WM_LBUTTONDOWN, 0, (y << 16) + x);
SendMessage(win, WM_LBUTTONUP, 0, (y << 16) + x);
Sleep(500);
// 粘贴
SendMessage(win, WM_PASTE, 0, 0);
Sleep(500);
x = 652;
y = 632;
SendMessage(win, WM_LBUTTONDOWN, 0, (y << 16) + x);
SendMessage(win, WM_LBUTTONUP, 0, (y << 16) + x);
Sleep(500);
// 回车
// SendMessage(win, WM_KEYDOWN, VK_RETURN, 0);
// Sleep(500);
printf("i=%dn", i);
}
//system("pasue");
return 0;
}
最后
以上就是漂亮钻石为你收集整理的C++模拟鼠标点击和键盘输入的操作 mouse_event & keybd_event实际运用,视频讲解相关环境相关说明实际案例补充的全部内容,希望文章能够帮你解决C++模拟鼠标点击和键盘输入的操作 mouse_event & keybd_event实际运用,视频讲解相关环境相关说明实际案例补充所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复