C++实现鼠标点击和获取鼠标位置(编译环境visual studio 2022)

1环境说明

2获取鼠标位置的接口

cpp 复制代码
void GetMouseCurPoint()
{
    POINT mypoint;

    for (int i = 0; i < 100; i++)
    {
        GetCursorPos(&mypoint);//获取鼠标当前所在位置
        printf("% ld, % ld \n", mypoint.x, mypoint.y);
        Sleep(1000);
    }
}

3操作鼠标左键和右键的接口

cpp 复制代码
void MouseLeftDown()//鼠标左键按下 
{
    INPUT  Input = { 0 };
    Input.type = INPUT_MOUSE;
    Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
    SendInput(1, &Input, sizeof(INPUT));
}

void MouseLeftUp()//鼠标左键放开 
{
    INPUT  Input = { 0 };
    Input.type = INPUT_MOUSE;
    Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
    SendInput(1, &Input, sizeof(INPUT));
}

void MouseRightDown()//鼠标右键按下 
{
    INPUT  Input = { 0 };
    Input.type = INPUT_MOUSE;
    Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
    SendInput(1, &Input, sizeof(INPUT));
}

void MouseRightUp()//鼠标右键放开 
{
    INPUT  Input = { 0 };
    Input.type = INPUT_MOUSE;
    Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
    SendInput(1, &Input, sizeof(INPUT));
}

4鼠标移动的接口

cpp 复制代码
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);

    printf("fScreenWidth %lf , fScreenHeight %lf, fx %lf, fy %lf \n", fScreenWidth, fScreenHeight, fx, fy);

    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));
}

5Main函数和头文件

cpp 复制代码
#include <stdint.h>
#include <Windows.h>
#include <stdio.h>

int main()
{
    Sleep(1000);          //延时函数

    GetMouseCurPoint();   //获取鼠标当前所在位置

    MouseMove(x, y);      //x, y坐标从GetMouseCurPoint()的打印中获取

    Sleep(10);            //move之后需要延时

    MouseLeftDown();

    Sleep(1);

    MouseLeftUp();

    Sleep(100);

    return 0;
}

6参考资料和说明

  • 参考链接

http://t.csdnimg.cn/ezeafhttp://t.csdnimg.cn/ezeaf

  • 代码下载链接

https://download.csdn.net/download/u013232419/88808663https://download.csdn.net/download/u013232419/88808663

  • 说明

代码部分已经全部放到正文中了,上述的资料需要下载积分1分(就当懒得复制的分吧,不是很喜欢动不动一个资料需要40多分,期望更多类似的分享)。

相关推荐
t***5448 小时前
如何在现代C++中更有效地应用这些模式
java·开发语言·c++
itman3018 小时前
C语言、C++与C#深度研究:从底层到现代开发演进全解析
c语言·c++·c·内存管理·编译模型
Hical_W10 小时前
为 C++ Web 框架设计三层 PMR 内存池:从原理到实战
c++·github
BestOrNothing_201510 小时前
C++零基础到工程实战(3.6):逻辑实战示例—日志模块
c++·命令行参数·main函数·switch case·逻辑判断·if else·enum class
t***54410 小时前
有哪些常见的架构设计模式在现代C++中应用
开发语言·c++
zopple11 小时前
汇编、C、C++和Java核心技术对比
c语言·汇编·c++
汉克老师12 小时前
GESP2024年3月认证C++三级( 第三部分编程题(1、字母求和)
c++·string·gesp三级·gesp3级·大小写判断
沐雪轻挽萤12 小时前
10. C++17新特性-保证的拷贝消除 (Guaranteed Copy Elision / RVO)
开发语言·c++
leaves falling13 小时前
C/C++ 的内存管理,函数栈帧详讲
java·c语言·c++
wuyoula13 小时前
AI导航智能决策系统源码 附教程
c++·tcp/ip·源码