C/C++ Windows平台 模拟键盘 / 鼠标操作
原理:调用Windows API
头文件: Windows.h
鼠标
参考:MSDN :mouse_event function
按键
使用定义在
Winuser.h
中的mouse_event函数(Windows.h
中已经包含了Winuser.h
)该函数定义如下:void mouse_event(DWORD dwFlags,DWORD dx,DWORD dy,DWORD dwData,ULONG_PTR dwExtraInfo );
具体每个参数的含义以及其他信息,可以查询 MSDN : mouse_event function
我们可以把表示鼠标点击事件的不同的DWORD
值放在一个map数组里:int mousemap[3][2]={ //对应的值:0x0002 0x0004 {MOUSEEVENTF_LEFTDOWN, MOUSEEVENTF_LEFTUP },// 0x0020 0x0040{MOUSEEVENTF_MIDDLEDOWN, MOUSEEVENTF_MIDDLEUP },// 0x0008 0x0010{MOUSEEVENTF_RIGHTDOWN, MOUSEEVENTF_RIGHTUP }};
这样,mousemap[0][0] 就表示按下鼠标左键,mousemap[0][1]就代表抬起鼠标左键,mousemap[1][0]表示按下鼠标滚轮键,mousemap[1][1] 表示抬起鼠标滚轮键 mousemap[2][0]表示按下鼠标右键,mousemap[2][1]表示抬起鼠标右键
我们就可以写一个鼠标单击函数:void MouseClick(int c) //0:左键 1:滚轮键 2:右键 {mouse_event(mousemap[c][0],0,0,0,0);mouse_event(mousemap[c][1],0,0,0,0); }
移动
有两种方法来写鼠标移动函数,(说鼠标移动可能不太严谨,因为我们的代码并不能让你的鼠标动起来,这是违反物理定律的,他只能让屏幕上的光标移动)第一种是使用GetCursorPos函数获取光标当前位置,再使用SetCursorPos函数设置光标位置:
void Mouse_Move(int dx,int dy) //dx: 水平方向位移,正向向右 dy:垂直方向位移,正向向下 {POINT p = {0,0};GetCursorPos(&p);SetCursorPos(p.x + dx, p.y + dy); }
这个函数先是获取光标当前的X / Y轴坐标,再在当前横纵坐标上加上水平和垂直位移
dx
,dy
来表示朝指定方向移动指定距离后的坐标,再配合Sleep函数延时,就可以实现自定义鼠标光标移动速度的效果。第二种方法是使用mouse_event函数,参考上面已经给出的定义,第一个参数
dwFlags
设置为MOUSEEVENTF_MOVE
(对应值为0x0001
),第二个和第三个参数就是dx和dy, 封装如下:void Mouse_Move(int dx,int dy) //dx: 水平方向位移,正向向右 dy:垂直方向位移,正向向下 {mouse_event(MOUSEEVENTF_MOVE,dx,dy,0,0); }
键盘
参考:MSDN : keybd_event function
按键
使用winuser.h中的keybd_event函数,该函数定义如下:
void keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,ULONG_PTR dwExtraInfo );
我们可以写出模拟键盘按下指定键的函数:
第一句按下,第二句抬起,如果没写第二句那么该键会一直处于按下状态void Click(int KEY) {keybd_event(KEY ,0,KEYEVENTF_EXTENDEDKEY | 0, 0); //相当于 keybd_event(KEY,0,0,0);keybd_event(KEY ,0,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0) ; //相当于 keybd_event(KEY,0,2,0); }
其中第一个参数
bVk
的值如下(为了方便,我这里以枚举的形式重新封装):enum SHORTCUT{CTRL = VK_LCONTROL,SHIFT = VK_LSHIFT,ALT = VK_MENU, ESC = VK_ESCAPE,WIN = VK_LWIN,BACK = VK_BACK,TAB = VK_TAB,ENTER = VK_RETURN,HOME = VK_HOME,END = VK_END,DEL = VK_DELETE,INS = VK_INSERT,UP = VK_UP,DOWN = VK_DOWN,RIGHT = VK_RIGHT,LEFT = VK_LEFT,F1 = VK_F1, F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,PRTSC = VK_PRINT,A = 65,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z };
C/C++ Windows平台 模拟键盘 / 鼠标操作相关推荐
- Python 模拟键盘鼠标操作实战教程
在某些情况下,如果我们需要进行自动化操作的应用没有提供相应的接口,我们无法直接通过Python来调用API实现自动化.这种情况下,Python也不是完全没有办法的,我们可以采用模拟键盘和鼠标的方式实现 ...
- 程序模拟键盘鼠标操作
用代码模拟键盘鼠标操作,主要用到keybd_event/mouse_event或者SendInput API函数.使用示例如下(附注释): /* * 模拟键盘输入,以 ...
- java 模拟鼠标_java实现简单的模拟键盘鼠标操作
简简单单的记录: 近期需要用到模拟键盘鼠标操作,所以记录下来,以备后用,看了很多例子,未标明引用,请见谅 package com.text.jna; import javax.imageio.Imag ...
- Cypress之模拟键盘鼠标操作以及页面元素拖动操作
上篇文章讲解了使用cypress框架时,如何上传或者下载文件,以及定位操作iframe和shadow dom下的页面元素.此次课程将讲解如何模拟键盘输入.鼠标操作以及如何拖动页面元素,另外,会介绍如何 ...
- python在程序中模拟键盘鼠标操作
Python中模拟键盘和鼠标最著名的模块是:pymouse 和 pykeyboard.一次安装两个模块比较麻烦,而有一个库整合了这两个模块,而且能支持跨平台操作,这个库叫 PyUserInput,通过 ...
- java整理软件---java模拟键盘,鼠标操作
1.Java 模拟键盘输入的小Demo,实现自动按下:模拟Ctrl+Alt+Z的按下和抬起 如果你开着qq的话,那么qq会自动弹出来.哈哈,代替人工操作; import java.awt.Rob ...
- python模拟键盘鼠标操作
python版本:3.6.2 扩展: autopy3 (python2.x的话 安装autopy 就可以了) //autopy是一个自动化操作的python库,可以模拟一些鼠标.键盘事件,还能对屏幕进 ...
- C# 使用Win32 API模拟键盘鼠标操作网页
在webbrowser控件中的document complete 事件中设置链接到自身 private void ieFrame_DocumentCompleted(object sender, We ...
- [转载]C#模拟键盘鼠标事件-SendKeys
C#模拟键盘鼠标事件-SendKeys 2007-09-18 15:138596人阅读评论(1)收藏举报 1.模拟键盘事件 System.Windows.Forms.SendKeys以下是 Sen ...
最新文章
- django 静态数据_如何在Django中使用静态数据?
- android 左滑按钮,android开发类似微信列表向左滑动按钮操作
- 批量创建Linux用户账号
- poj 3414 Pots-bfs
- [BZOJ4756]Promotion Counting
- [转]一个软件设计的全过程(基于UML)
- python中矩阵除法_Python numpy矩阵处理运算工具用法汇总
- visio的一些用法
- 三菱PLC MC协议
- 端到端语音识别 ESPnet ASR脚本流程(asr.sh)
- 两种典型频谱仪架构介绍
- history路由下,Whitelabel Error Page错误
- 哲学家进餐_我如何通过预算学习计划进餐
- FusionCharts基本使用
- hathitrust 下载工具 (大量英文原版名著扫描免费下载)
- 工作感受月记 201907月
- 关于计算机游戏的电视,电视怎么玩电脑游戏,具体方法分享
- 在BAT级别的公司工作是一种怎样的体验?
- 许昌技术经济学校95级计算机,许昌技术经济学校2021年有哪些专业
- 中基鸿业长期理财产品存在哪些风险
热门文章
- NJ大学PA学习记录
- 常见的CNN模型介绍
- 讯飞语音输入法在PC电脑上怎么语音输入
- katalon 测试app_Katalon Studio一款免费的自动化测试工具
- katalon android 测试,脚本模式创建测试用例 - Katalon Studio
- mysql批量删除多条记录的sql语句_一次删除多条记录的sql语句
- DirectFB::-Fusion简介
- 访问内网弹窗“您的连接不是私密链接“且要输入用户名密码
- 要想焊好氩弧焊,这些工艺禁忌你要记牢
- Milo源码解析(一)