c++模拟鼠标事件

用C#模拟鼠标按下的WinAPI函数 用Mouse_event()来控制鼠标操作<br />在自动化测试的开发中,有一些控件的ID是很难找到的,所以有些时候,我们直接设置鼠标的位置,然后是用click事件,会收到很好的效果。在Windows API中有个mouse_event函数为我们准备好了这一切。 <br />这个函数在user32.dll这个库文件里面。我们可以在C:/WINDOWS/system32(XP系统)这个目录下找到这个文件,他是系统自带的。 我们以C#直接调用这个文件中的API为例子来说下怎么进行鼠标操作,首先在我们C#中声明 阅读详情

c++模拟鼠标事件,一般可以通过mouse_event()和SendInPut()两种方法。mouse_event()在windows后期版本中逐渐被SendInPut()取代。SendInPut()模拟鼠标移动的事件中,标志位取值不同,输入坐标的意义也不同。简单来说就是,添加MOUSEEVENTF_ABSOLUTE标志位表示鼠标移动是通过绝对坐标定位,此时的坐标要通过转换。光标在屏幕中被分成65535个小块,可以通过如下转换:

  double fx = x*(65535.0f/fScreenWidth);
  double fy = y*(65535.0f/fScreenHeight);

若不使用MOUSEEVENTF_ABSOLUTE标志位,则坐标是相对前一坐标的位移。

SendInPut()鼠标事件使用如下结构:

typedef struct tagMOUSEINPUT {
  LONG      dx;
  LONG      dy;
  DWORD     mouseData;
  DWORD     dwFlags;
  DWORD     time;
  ULONG_PTR dwExtraInfo;
} MOUSEINPUT, *PMOUSEINPUT;

 

msdn中完整解释如下:

dx

Type: LONG

The absolute position of the mouse, or the amount of motion since the last mouse event was generated, depending on the value of the dwFlags member. Absolute data is specified as the x coordinate of the mouse; relative data is specified as the number of pixels moved.

dy

Type: LONG

The absolute position of the mouse, or the amount of motion since the last mouse event was generated, depending on the value of the dwFlags member. Absolute data is specified as the y coordinate of the mouse; relative data is specified as the number of pixels moved.

 

以下是摘自网络上的一段FAQ,代码演示了鼠标的几个具体操作。

Q: How can I emulate mouse events in an application?

A:

  • There are two API fucntions that you can use:


  • Which of the two API functions should I use?

    The 'mouse_event()' function has been superseded by 'SendInput()' on Window NT/2000/XP. Thus, on these operating systems you should use 'SendInput()' (unless you need to provide backward compatibility with Windows 98 etc.). This FAQ is based on 'SendInput()'.

  • Can I see some example on how to use 'SendInput()' to emulate a click with the left mouse button?


    Code:

    void LeftClick ( )
    { 
      INPUT    Input={0};
      // left down
      Input.type      = INPUT_MOUSE;
      Input.mi.dwFlags  = MOUSEEVENTF_LEFTDOWN;
      ::SendInput(1,&Input, sizeof(INPUT));

      // left up
      ::ZeroMemory(&Input, sizeof(INPUT));
      Input.type      = INPUT_MOUSE;
      Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;
      ::SendInput(1,&Input, sizeof(INPUT));
    }
  • How to use the function?


    Code:
    LeftClick();
    The left click will be performed on the current position of the mouse cursor.

  • Can I see some example on how to use 'SendInput()'
    to emulate a click with the right mouse button?


    Code:

    void RightClick ( )
    { 
      INPUT    Input={0};
      // right down
      Input.type      = INPUT_MOUSE;
      Input.mi.dwFlags  = MOUSEEVENTF_RIGHTDOWN;
      ::SendInput(1,&Input, sizeof(INPUT));

      // right up
      ::ZeroMemory(&Input, sizeof(INPUT));
      Input.type      = INPUT_MOUSE;
      Input.mi.dwFlags  = MOUSEEVENTF_RIGHTUP;
      ::SendInput(1,&Input, sizeof(INPUT));
    }
  • How to use the function?


    Code:

    RightClick();
    The right click will be performed on the current position of the mouse cursor.

  • Can I see some example on how to use 'SendInput()' for emulating mouse movement?


    Code:

    void MouseMove ( int x, int y )
    { 
      double fScreenWidth    = ::GetSystemMetrics( SM_CXSCREEN )-1;
      double fScreenHeight  = ::GetSystemMetrics( SM_CYSCREEN )-1;
      double fx = x*(65535.0f/fScreenWidth);
      double fy = y*(65535.0f/fScreenHeight);
      INPUT  Input={0};
      Input.type      = INPUT_MOUSE;
      Input.mi.dwFlags  = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
      Input.mi.dx = fx;
      Input.mi.dy = fy;
      ::SendInput(1,&Input, sizeof(INPUT));
    }
  • How to use the function?


    Code:

    MouseMove(100,100);
    This call will move the mouse cursor to the position 100/100 on the screen.



Thanks to cilu for helping writing this FAQ.

SendInput和mouse_event模拟鼠标点击事件问题解决 最近在做有关kinect控制鼠标事件时遇到了一个小问题,这里写点记录。 首先我简单介绍一下关于SendInput和mouse_event函数模拟鼠标事件的方法。 这两个函数是C++里使用的,先给个SendInput函数的原型,参照MSDN UINT SendInput( UINT nInputs, // count of input events LPINPUT pInp 阅读详情

相关推荐

Windows下C/C++模拟鼠标点击,没有鼠标怎么获取鼠标坐标、移动鼠标坐标、模拟鼠标点击事件?方法二 亲测有效

在使用PC端开发应用时,没有鼠标设备的情况下实现由一个前台程序触发来实现底层程序的触发,如模拟鼠标的点击事件,键盘等 模拟鼠标操作 mouse_event是比较旧的API,新的API名为SendInput if (key == KZS_KEY_ENTER) { //点击 MouseMove(100, 100); MouseLeftDown(); Sleep(10); Mou...

xi_gua_gua的博客 2033

用Mouse_event()来控制鼠标操作

<br />用Mouse_event()来控制鼠标操作已有 238 次阅读  2010-01-10 23:34   标签:  鼠标  event  Mouse       在自动化测试的开发中,有一些控件的ID是很难找到的,所以有些时候,我们直接设置鼠标的位置,然后是用click事件,会收到很好的效果。在Windows API中有个mouse_event函数为我们准备好了这一切。 <br />    这个函数在user32.dll这个库文件里面。我们可以在C:/WINDOWS/system32(XP系统)这

ding_net的专栏 3699

Windows下C/C++模拟鼠标点击,PC端没有鼠标设备也能够获取鼠标坐标、移动鼠标坐标、模拟鼠标点击事件,方法一 亲测有效

在使用PC端开发应用时,没有鼠标设备的情况下实现由一个前台程序触发来实现底层程序的触发,比如模拟鼠标的点击事件,键盘事件等 移动鼠标坐标 SetCursorPos(100,200) 设置鼠标当前位置。坐标以屏幕的左上角为原点,单位是像素点。 在Windows SDK中的函数原型: 引入头文件#include <Windows.h>就可以使用这个函数 BOOL SetCursorPo...

xi_gua_gua的博客 4597

c++使用sendinput函数实现模拟键盘按键操作

c++使用sendinput函数实现模拟键盘按键操作

DaiCharlie的博客 1万+

用C++模拟键盘和鼠标操作

2.设置INPUT结构体中的信息,其中type字段设置为INPUT_MOUSE,mi.dwFlags字段设置为鼠标事件的类型,如按下、弹起、移动等。2.设置INPUT结构体中的信息,其中type字段设置为INPUT_KEYBOARD,ki.wVk字段设置为要模拟的键盘按键的虚拟键码。以上就是C++模拟键盘和鼠标操作的实现方法。在C++编程中,我们可以使用Windows API函数来模拟键盘和鼠标操作。本文将介绍如何通过C++代码来实现模拟键盘和鼠标操作。首先介绍如何模拟键盘操作,即向计算机输入字符。

PixelCoder的博客 2155

C++ Qt悬浮窗:QWidget无边框窗口、鼠标事件与双击模拟清理

桌面GUI开发中,悬浮窗是一种特殊的无边框置顶窗口,其实现核心涉及窗口标志位组合与鼠标事件分派。QWidget作为C++ Qt框架的基础界面类,通过设置FramelessWindowHint、WindowStaysOnTopHint及透明背景属性,可以快速构建出符合悬浮球形态的窗口。鼠标的单击、双击与拖动共用同一事件序列,开发者需借助定时器延迟和位移阈值来区分三种手势,这是Qt交互编程中的常见难点。窗口边缘吸附则依赖屏幕可用几何区域计算与属性动画驱动。本文以C++ Qt实现一个可拖拽、自动吸附并支持双击模拟

weixin_26834815的博客 103

c++--模拟鼠标事件

c++模拟鼠标事件,一般可以通过mouse_event()和SendInPut()两种方法。mouse_event()在windows后期版本中逐渐被SendInPut()取代。SendInPut()模拟鼠标移动的事件中,标志位取值不同,输入坐标的意义也不同。简单来说就是,添加MOUSEEVENTF_ABSOLUTE标志位表示鼠标移动是通过绝对坐标定位,此时的坐标要通过转换。光标在屏幕中被分成65

Tan 2467

《华为项目管理之道》第1章笔记

performance indicator,KPI)纳入个人绩效承诺书,贯彻结果导向的理念,以向员工。客户需求是华为发展的原动力,为客户服务是华为存在的唯一理由。目经理‘用兵’,依靠市场机制‘调兵’”,打破了人员在功能部门的板结,实现了听得。为管理者选拔的必要条件,项目经理成为人人向往的岗位。《华为项目管理之道》,是新出的华为官方的项目管理书,整个书不错。伴随着项目型组织的建立,华为逐步形成了完备的项目管理流程和制度,从而将业务运。为此,通过改革,重新明确了项目经理承担的经营责任,并开始以项。

jackyrongvip的专栏 2127

C++模拟鼠标键盘操作实战:用TaoToken统一Key打通输入事件调试链路

用C++ SendInput封装模拟鼠标键盘操作时,先跑通最小验证再接入TaoToken统一Key管理调试链路。本文给出可复制的input_sim封装代码与cl编译命令,逐条确认点击、输入、组合键生效,并排查401、local proxy failed、reading choices等常见报错。TaoToken官网:https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_35756130的博客 14

STM32 RTC_WaitForSynchro()死循环问题分析与LSI时钟优化实践

本文深入分析了STM32使用LSI时钟源时,调用RTC_WaitForSynchro()函数陷入死循环的根本原因。问题核心在于RTC时钟域未正确使能,导致硬件同步标志RSF无法置位。文章提供了通过显式调用RCC_RTCCLKCmd(ENABLE)函数启用RTC时钟总开关的解决方案,并分享了编写健壮RTC/BKP初始化代码、增加超时机制等最佳实践,确保系统稳定运行。

weixin_29185493的博客 510

一种基于OpenPose和DNN的跌倒检测软件系统(中文&英文)

学习并实现一种跌倒检测模型,此模型基于OpenPose实现逐帧人体姿态检测,使用DNN识别人体动作。检测方式有在线与离线两种,本文主要测试了离线模式,测试效果较好。

Tongzhou_Li的博客 2642

Qt下鼠标点击事件模拟(窗口未知)

       Qt下鼠标点击事件只能指定窗口Qt中能找到的窗口,想到c++也能在Qt下平稳运行。抛弃Qt封装好的鼠标点击,查找关于c++的鼠标点击模拟事件资料。       Qt的代码就不上了,网上有很多,但都需要传两参数,对未知窗口的鼠标事件模拟特别不友好。直接C++的代码 SetCursorPos(1407,886);//设置鼠标位置 //中间的0可以不要管 mouse_event...

qq_40680049的博客 3855

微积分,用编程理解高数(python,C,C++)

很好理解,导数中,x是哪一点的导数,dx是精准度,y等于f(x)即函数。导数结果就是瞬时变化率。积分很好理解,a为下限,b为上限,y为函数,结果就是y=f(x)下a到b的面积。只要用定积分代入a=0,b=10(10s)y=x(1*x=1)就得到结果。F(x)为原函数,即微分后的函数是f(x)dx,微分前是F(x)一列车初始速度为10m/s,加速度为。才几十行代码,微积分也不是很难啊。,问速度达到20时车走了多少米。

linhhanpy的博客 1177

UE4学习-鼠标事件(按下、释放、物体抓取、计算重量、触发开门)

一、目的 1、想:ue4的C++中模拟鼠标事件 二、参考 1、UE4学习-鼠标事件(按下、释放、物体抓取、计算重量、触发开门) https://blog.youkuaiyun.com/u013824564/article/details/107093499/ 总结:

qq_40544338的博客 1522

从GitHub到海浪模拟:手把手教你配置WAVEWATCHⅢ 6.07.0的完整开发与测试环境

本文详细指导如何在Ubuntu系统中配置WAVEWATCHⅢ 6.07.0的开发与测试环境,涵盖虚拟机设置、依赖安装、源码编译及案例验证的全流程。通过步骤化教程,帮助科研人员快速搭建高效的海浪模拟平台,提升海洋数值模拟的研究效率。

weixin_42568801的博客 322

ansys非线性分析中接触类型

不分离(No Separation)‌:法向始终保持接触不分离,切向允许自由滑动,属于线性接触,适合需要法向约束、允许微小切向位移的场景,比如过盈配合的简化模拟。有摩擦(Frictional)‌:法向允许分离,切向根据用户设置的摩擦系数计算摩擦力,是工程中最符合实际机械接触的类型,绝大多数装配体分析都选择该类型。无摩擦(Frictionless)‌:法向允许接触面分离,切向无摩擦、允许自由滑动,适合模拟理想润滑的光滑接触面,图中当前选择的就是该类型。非线性接触(需要多次迭代,属于真正的非线性接触行为)‌。

qq_15963745的博客 71

c++读写键盘端口的方法来模拟键盘、鼠标硬件事件

c++读写键盘端口的方法来模拟键盘、鼠标硬件事件

qq_14860257的博客 526

Vue - 萤石云监控 ezuikit 视频实例销毁方案,解决使用stop方法无法销毁EZUIKit实例或销毁后依然占用内存并且监控画面依然有声音问题(解决页面多个监控摄像头画面同时播放,翻页或关闭页

vue2,vue3,萤石,监控摄像头,萤石云销毁视频实例,退出页面销毁,stop销毁原视频流,占用内存怎么办,销毁后视频依旧在后台播放有声音,销毁视频播放器,页面上有多个视频画面怎么销毁某一个,stop方法不生效怎么办,浏览器非常卡,dom销毁,ezuikit-js萤石云播放器Vue中使用beforeDestory销毁播放器实例,调用萤石云ezuikit-js的视频对象销毁,vue使用萤石云监控视频录像回放,不销毁实例会出现离开页面后依旧有监控声音并且占内存问题,不好使,页面崩了,崩溃,视频监控太多,没有用

🏆 前端领域优质创作者 1万+

c++ Qt5学习笔记 2020-10-7(鼠标点击移动事件,改变鼠标样式,模拟鼠标拖拽控件)

label显示边框 ui -> label_14 -> setStyleSheet("border:1px solid black;"); 鼠标点击移动事件 //mainwindow.h中添加头文件 #include <QMouseEvent> //添加点击事件指针 protected: void mousePressEvent(QMouseEvent *e);//鼠标点击事件 void mouseMoveEvent(QMouseEvent *e);//鼠标移动事件

qq_36780295的博客 1253

[QMT量化交易小白入门]-三十七、QMT中如何使用类似于通达信中的VBA函数(量化python代码解析)

这段代码主要围绕着在QMT环境中实现类似通达信VBA函数的功能展开,核心功能是基于RSI指标来判断股票的买卖时机,并根据持仓情况进行相应的交易操作。class G():passg = G()这里定义了一个空类G,并创建了该类的实例g。这个实例g将作为全局变量来存储一些在整个程序运行过程中需要共享的数据,例如除复权类型、股票代码、目标数量等。1、使用VBA开发策略时,参数固化的问题会带来一些限制,比如无法修改MA函数的周期参数,只能使用固定周期。

木头大左的博客 1690

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C++小工具之得到鼠标位置并模拟点击

检测鼠标左键被按下: KEY_DOWN(VK_LBUTTON) 得到鼠标按下时坐标: POINT p; GetCursorPos(&p); cout << " x position:" << p.x << " y position: " << p.y << endl; 设置模拟点击的位...

Asher_zheng的专栏 2506

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Linux C++ 鼠标监听

Linux C++ 监听鼠标按下状态且获取按下的位置 #include <stdio.h> #include <linux/input.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <gdk/gdk.h> //参数分别是mouse的横纵坐标 void get_mouse_pos

做一个快乐学习者 1138

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Visual C++编程隐藏计算机中的鼠标

在Windows大行其道的今天,windows界面程序受到广大用户的欢迎。对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制。那么我们能否通过编制程序来控制系统的鼠标,例如隐藏计算机中的鼠标呢?这个问题的答案是肯定的。这里主要是通过一个Windows API函数来实现的。下面以一个Visual C++的实例来介绍如何实现这个功能。需要读者朋友们注意的是本代码具有一定的危险性,程序运行后你将无法

jiangxinyu的专栏 1299

Windows使用C++模拟鼠标点击----防止校园网掉线--登录校园网

Windows模拟鼠标点击使用Python总会出现问题,所以使用C++ 来实现。5、 输入g++ -std=c++11 gct2.c -o gc2.exe。Linux模拟鼠标使用shell脚本就可以实现了,可以搜一下就可以解决。2、 在终端 输入 g++ -std=c++11 gl.c。4、把坐标添加到gct2.c 上面去,运行。即可 使用gl.c 生成 a.exe。在gct2.c的坐标就会自动点击了。把鼠标移动到想要获取的坐标回车。3、在cmd上输入a.exe。输入 gc2.exe。

m0_62150796的博客 591

笔記-使用C++编写Windows脚本

使用C++编写Windows脚本的一些Windows API基础

StarryPhantom的博客 3450
上一篇: opencv中窗口置顶的方法
下一篇: [转贴]IPOD接口定义
sing_sing
博客等级 码龄20年 209粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值