C++实现【获取鼠标位置】以及控制鼠标【打开窗口并点击】

2023-11-01

获取鼠标位置的函数源代码来自:C++【认知系列】实时获取鼠标坐标_c++ 获取鼠标坐标_Zalamp的博客-CSDN博客

鼠标点击操作代码来自:

C++控制鼠标移动到指定位置并且左键点击_c++鼠标移动_蜚语77的博客-CSDN博客

在特定程序中实现鼠标点击操作分为两步,第一步就是在任务栏点击一下鼠标,然后在打开的窗口里再点击特定按钮。需要用到两个函数被我整合了一下。一个就是获取位置的函数,在10s(当然要看多久可以自己调整)内获取到任务栏和特定窗口中按钮的位置;另一个就是将位置坐标输入后让程序实现点击操作的函数。

全部代码如下:

#include <windows.h>
#include <iostream>
#include <iomanip>		//setw()函数所在库
#include<stdlib.h>
#include<time.h>
using namespace std;

void get_position()
{//获取鼠标位置坐标
    CONSOLE_CURSOR_INFO info = { 1, 0 };				//创建光标的属性结构体
    HANDLE hand = GetStdHandle(STD_OUTPUT_HANDLE);	//创建光标的句柄
    COORD coord = { 0, 0 };								//创建xy坐标结构体,用于设置光标位置
    POINT pt = { 0, 0 };								//创建鼠标点坐标变量
    SetConsoleCursorInfo(hand, &info);				//设置光标属性
    //循环显示
    int t = 100;//程序将在10s后退出
    while (1) {
        SetConsoleCursorPosition(hand, coord);		//传入光标句柄和坐标设置光标位置
        GetCursorPos(&pt);							//获取鼠标点的坐标位置
        cout << "当前坐标:" << pt.x << ',' << pt.y << setw(10) << "\0" << endl;	//输出坐标

        cout << "程序将在" << t / 10 << "s后继续 " << endl;;//在这段时间内可以获取想要点击的目标的坐标
        Sleep(100);
        if (t == 0) {break; }
        t = t - 1;

    }
    //循环显示结束
    

}

int mouseclick(int x,int y)
{
    // 模拟鼠标左键单击
    INPUT input;                //创建一个INPUT类型结构体
    input.type = INPUT_MOUSE;   //指定输入事件类型为鼠标事件
    input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; // 模拟鼠标左键按下和抬起的动作
    //mi是结构体INPUT的一个成员属性,mi是MOUSEINPUT类型
    //MOUSEINPUT 结构体用于描述鼠标事件,例如鼠标左键单击、双击、右键单击、移动等操作。
    SetCursorPos(x, y);
    input.mi.dx = 0;            //设置鼠标事件发生的x坐标
    input.mi.dy = 0;            //设置鼠标事件发生的y坐标
    input.mi.mouseData = 0;     //设置鼠标滚轮的滚动距离
    input.mi.dwExtraInfo = 0;   //将 dwExtraInfo 字段设置为 0,表示不传递任何附加的输入数据。
    input.mi.time = 0;          //time字段是用来设置时间戳的,0表示使用系统的时间戳
    SendInput(1, &input, sizeof(INPUT));
    /*SendInput函数是 Win32 API 中用于模拟输入事件的函数,可以模拟鼠标事件、键盘事件、硬件事件
    等。
    其函数原型如下:
        UINT SendInput(UINT nInputs, LPINPUT pInputs, int cbSize);
    其中,nInputs 参数指定输入事件的数量,pInputs 参数指向输入事件数组的指针,cbSize 参数指定输
    入事件数组的大小(单位为字节)。*/
    return 0;
}



int main()
{
    //首先获取到需要点击的位置坐标序列,这个函数调试时使用,获取到坐标简后可以注释掉
    get_position();

    // 将鼠标移动到特定的位置并单击,打开之前最小化到任务栏的程序
    mouseclick(400, 1068);

    //让程序睡眠1s再运行
    cout << "sleep 0.01s" << endl;
    Sleep(10);

    // 将鼠标移动到特定的位置并单击,在特定程序中执行点击操作
    mouseclick(1055, 578);



    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++实现【获取鼠标位置】以及控制鼠标【打开窗口并点击】 的相关文章

随机推荐

  • 怎么在云服务器上跑深度学习项目,深度学习训练

    MMCV 是一个面向计算机视觉的基础库 它支持了很多开源项目 注意事项 RTX 3000 系列显卡在 PyTorch 1 8 1 For CUDA 11 1 上 MMCV 目前工作不正常 使用此系列显卡时 请选择 PyTorch 1 7 1
  • C语言循环数组解决数学问题,通过C语言数组解决一些简单的递推数学问题

    通过C语言数组解决一些简单的递推数学问题 c语言是一种十分适合解决数学问题的编程语言 其中数组对于解决递推问题有十分优秀的作用 数组 数组就是变量的集合 是一种指定义变量的方法 一维数组 定义 类型 数组 数量 里的整数表示变量的数量 in
  • 【猿人学WEB题目专解】猿人学第2题

    据说 看我文章时 关注 点赞 收藏 的 帅哥美女们 心情都会不自觉的好起来 前言 作者简介 大家好我是 user from future 意思是 来自未来的用户 寓意着未来的自己一定很棒 个人主页 点我直达 在这里肯定能找到你想要的 专栏介
  • 【计算机视觉

    文章目录 一 ZeroWaste 二 Aircraft Context Dataset 三 BdSLImset Bangladeshi Sign Language Image Dataset 四 COCO Tasks 五 Deep PCB
  • fragment中嵌套viewpager,vierpager中有多个fragment,不显示 .

    http blog csdn net shaoyizhe2006 article details 27352349
  • PID 算法 (温控为例子)

    一 位式控制 位式控制算法输出信号一般只有高低两种状态 算法输出信号out的依据 PV lt SP gt H PV gt SP gt L 对于系统惯性 会导致系统震荡 PID算法 基于位式控制 做了很多优化 SP Set Point PV
  • 《数学建模实战攻略:常用数学理论与方法Matlab》

    一 简介 在数学建模过程中 选择合适的数学理论和方法对于解决问题至关重要 在本篇博客中 我们将介绍数学建模中经常用到的一些数学理论和方法 包括线性代数 微积分 概率论与统计以及优化方法 此外 我们将通过一个简单的示例来展示如何使用MATLA
  • 【纯干货】神奇的Ctrl键,Linux运维常用快捷键!

    Ctrl 可以带来什么意想不到的效果呢 是否所有的Linux运维常用快捷键你都已经掌握了呢 小编发现不少小伙伴们在学习以及Linux运维工作中 操作命令行还在用很土很没效率的方法 例如频繁用方向键移动命令行光标 频繁敲重复的命令等 为了解决
  • HA主备路由模式的原理

    HA是High Availability缩写 即高可用性 可防止网络中由于单个防火墙的设备故障或网络故障导致网络中断 保证网络服务的连续性和安全强度 目前 ha功能已经是防火墙内一个重要组成部分 主备模式 Active standby 在一
  • cerr与cout的区别

    概念 std cerr是ISO C 标准错误输出流 对应于ISO C标准库的stderr 与std cout不同 ISO C 要求当cerr被初始化后 cerr flags unitbuf非零 保证流在每次输出操作后被刷新 且cerr ti
  • Sublime Text的安装与配置记录

    Sublime Text作为一款优质的Code编辑器 已更新至第4个版本 本文记录关于Sublime Text 4 版本4126 的安装 汉化 以及常用配置方法 安装 访问官网下载安装包 https www sublimetext com
  • 如何注册快手引流号?快手引流账号应该注意什么?

    快手短视频的影响力越来越大 用户也是越来越多 一个流量聚焦的平台 通过用户分享自制的短视zhi频形式获取了大量粉丝 而且不屏蔽任何引流信息 可以说是非常开放 自由 快手在短时间内就拥有大量的用户数不得不说它的推广很到位 那么快手账号应该如何
  • 【题解】游戏 (2019.08.01纪中【NOIP提高组】模拟 B 组T1) DP 博弈论

    题目来源 中山纪念中学 题目描述 Alice和Bob在玩一个游戏 游戏是在一个N N的矩阵上进行的 每个格子上都有 一个正整数 当轮到Alice Bob时 他 她可以选择最后一列或最后一行 并将其删除 但 必须保证选择的这一行或这一列所有数
  • 使用Docker部署Node.js中的Vue项目

    1 准备工作 使用服务器 阿里云 服务器系统 CentOS 7 项目配置 准备好一个项目 该项目下有以下文件 对 package json 文件进行修改 设置项目启动的端口号和使用的ip 注 在修改package json文件中的host为
  • 图解 Java 垃圾回收机制,写得非常好!

    什么是自动垃圾回收 自动垃圾回收是一种在堆内存中找出哪些对象在被使用 还有哪些对象没被使用 并且将后者删掉的机制 所谓使用中的对象 已引用对象 指的是程序中有指针指向的对象 而未使用中的对象 未引用对象 则没有被任何指针给指向 因此占用的内
  • UnsatisfiedDependencyException: Error creating bean with name XXXController'

    在springboot中遇到了UnsatisfiedDependencyException Error creating bean with name XXXController 的问题 代码如下 controller public cla
  • 编辑器组件monaco

    1 配置代码编辑器子组件monaco js
  • 计算机网络篇-运输层

    运输层 运输层向上层应用层提供通信服务 运输层是端到端的通信 也就是说通信的两端是两个主机中的应用进程 运输层还有一个很重要的功能 分用 复用 运输层的两个主要协议 用户数据报协议UDP 不需要建立连接 传输控制协议TCP 提供面向连接的服
  • AngularJS自动化测试之karma+jasmine单元测试

    单元测试专门用于测试小型 独立的代码单元 单个函数 或者较小的功能 其主要难点在于划分小的功能块 本位主要介绍AngularJS的单元测试的环境搭建 Karma是一个基于Node js的JavaScript测试执行过程管理工具 Test R
  • C++实现【获取鼠标位置】以及控制鼠标【打开窗口并点击】

    获取鼠标位置的函数源代码来自 C 认知系列 实时获取鼠标坐标 c 获取鼠标坐标 Zalamp的博客 CSDN博客 鼠标点击操作代码来自 C 控制鼠标移动到指定位置并且左键点击 c 鼠标移动 蜚语77的博客 CSDN博客 在特定程序中实现鼠标