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

获取鼠标位置的函数源代码来自: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;
}

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值