原理:调用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平台 模拟键盘 / 鼠标操作相关推荐

  1. Python 模拟键盘鼠标操作实战教程

    在某些情况下,如果我们需要进行自动化操作的应用没有提供相应的接口,我们无法直接通过Python来调用API实现自动化.这种情况下,Python也不是完全没有办法的,我们可以采用模拟键盘和鼠标的方式实现 ...

  2. 程序模拟键盘鼠标操作

    用代码模拟键盘鼠标操作,主要用到keybd_event/mouse_event或者SendInput  API函数.使用示例如下(附注释):         /*         * 模拟键盘输入,以 ...

  3. java 模拟鼠标_java实现简单的模拟键盘鼠标操作

    简简单单的记录: 近期需要用到模拟键盘鼠标操作,所以记录下来,以备后用,看了很多例子,未标明引用,请见谅 package com.text.jna; import javax.imageio.Imag ...

  4. Cypress之模拟键盘鼠标操作以及页面元素拖动操作

    上篇文章讲解了使用cypress框架时,如何上传或者下载文件,以及定位操作iframe和shadow dom下的页面元素.此次课程将讲解如何模拟键盘输入.鼠标操作以及如何拖动页面元素,另外,会介绍如何 ...

  5. python在程序中模拟键盘鼠标操作

    Python中模拟键盘和鼠标最著名的模块是:pymouse 和 pykeyboard.一次安装两个模块比较麻烦,而有一个库整合了这两个模块,而且能支持跨平台操作,这个库叫 PyUserInput,通过 ...

  6. java整理软件---java模拟键盘,鼠标操作

    1.Java 模拟键盘输入的小Demo,实现自动按下:模拟Ctrl+Alt+Z的按下和抬起    如果你开着qq的话,那么qq会自动弹出来.哈哈,代替人工操作; import java.awt.Rob ...

  7. python模拟键盘鼠标操作

    python版本:3.6.2 扩展: autopy3 (python2.x的话 安装autopy 就可以了) //autopy是一个自动化操作的python库,可以模拟一些鼠标.键盘事件,还能对屏幕进 ...

  8. C# 使用Win32 API模拟键盘鼠标操作网页

    在webbrowser控件中的document complete 事件中设置链接到自身 private void ieFrame_DocumentCompleted(object sender, We ...

  9. [转载]C#模拟键盘鼠标事件-SendKeys

    C#模拟键盘鼠标事件-SendKeys 2007-09-18 15:138596人阅读评论(1)收藏举报 1.模拟键盘事件 System.Windows.Forms.SendKeys以下是   Sen ...

最新文章

  1. django 静态数据_如何在Django中使用静态数据?
  2. android 左滑按钮,android开发类似微信列表向左滑动按钮操作
  3. 批量创建Linux用户账号
  4. poj 3414 Pots-bfs
  5. [BZOJ4756]Promotion Counting
  6. [转]一个软件设计的全过程(基于UML)
  7. python中矩阵除法_Python numpy矩阵处理运算工具用法汇总
  8. visio的一些用法
  9. 三菱PLC MC协议
  10. 端到端语音识别 ESPnet ASR脚本流程(asr.sh)
  11. 两种典型频谱仪架构介绍
  12. history路由下,Whitelabel Error Page错误
  13. 哲学家进餐_我如何通过预算学习计划进餐
  14. FusionCharts基本使用
  15. hathitrust 下载工具 (大量英文原版名著扫描免费下载)
  16. 工作感受月记 201907月
  17. 关于计算机游戏的电视,电视怎么玩电脑游戏,具体方法分享
  18. 在BAT级别的公司工作是一种怎样的体验?
  19. 许昌技术经济学校95级计算机,许昌技术经济学校2021年有哪些专业
  20. 中基鸿业长期理财产品存在哪些风险

热门文章

  1. NJ大学PA学习记录
  2. 常见的CNN模型介绍
  3. 讯飞语音输入法在PC电脑上怎么语音输入
  4. katalon 测试app_Katalon Studio一款免费的自动化测试工具
  5. katalon android 测试,脚本模式创建测试用例 - Katalon Studio
  6. mysql批量删除多条记录的sql语句_一次删除多条记录的sql语句
  7. DirectFB::-Fusion简介
  8. 访问内网弹窗“您的连接不是私密链接“且要输入用户名密码
  9. 要想焊好氩弧焊,这些工艺禁忌你要记牢
  10. Milo源码解析(一)