以下代码示例演示了如何使用 C++ 模拟鼠标点击,通过向鼠标设备驱动程序发送输入数据,实现鼠标左键按下和释放的操作。

#include <Windows.h>
#include <winuser.h>
#include <ntddmou.h>

int test() {
    // 打开鼠标设备句柄
    HANDLE mouseHandle = CreateFile(L"\\.\mouse0", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (mouseHandle == INVALID_HANDLE_VALUE) {
        // 处理错误
        return 1;
    }

    // 设置鼠标输入数据
    MOUSE_INPUT_DATA mouseData;
    mouseData.UnitId = 0;
    mouseData.Flags = MOUSEEVENTF_LEFTDOWN;
    mouseData.ButtonData = 0;
    mouseData.RawButtons = 0;
    mouseData.LastX = 0;
    mouseData.LastY = 0;
    mouseData.ExtraInformation = 0;

    DWORD bytesWritten;
    BOOL result;

    // 模拟鼠标左键按下
    result = WriteFile(mouseHandle, &mouseData, sizeof(MOUSE_INPUT_DATA), &bytesWritten, NULL);
    if (!result) {
        // 处理错误
        CloseHandle(mouseHandle);
        return 1;
    }

    // 模拟鼠标左键释放
    mouseData.Flags = MOUSEEVENTF_LEFTUP;
    result = WriteFile(mouseHandle, &mouseData, sizeof(MOUSE_INPUT_DATA), &bytesWritten, NULL);
    if (!result) {
        // 处理错误
        CloseHandle(mouseHandle);
        return 1;
    }

    // 关闭鼠标设备句柄
    CloseHandle(mouseHandle);

    return 0;
}

代码解释:

  1. 包含必要的头文件:

    • Windows.h:提供 Windows API 函数
    • winuser.h:包含鼠标事件常量
    • ntddmou.h:定义 MOUSE_INPUT_DATA 结构
  2. 打开鼠标设备句柄:

    • 使用 CreateFile 函数打开鼠标设备句柄。
    • 设备路径为 \\.\mouse0,表示第一个鼠标设备。
  3. 设置鼠标输入数据:

    • 创建一个 MOUSE_INPUT_DATA 结构变量 mouseData,用于存储鼠标输入数据。
    • 设置 Flags 成员为 MOUSEEVENTF_LEFTDOWN 表示鼠标左键按下,MOUSEEVENTF_LEFTUP 表示鼠标左键释放。
    • 其他成员根据需要设置。
  4. 发送鼠标输入数据:

    • 使用 WriteFile 函数将鼠标输入数据发送到鼠标设备驱动程序。
    • 确保 result 值为 TRUE,表示发送成功。
  5. 关闭鼠标设备句柄:

    • 使用 CloseHandle 函数关闭鼠标设备句柄。

注意事项:

  • 该代码示例仅演示了如何模拟鼠标左键点击,您可以根据需要修改 Flags 成员来模拟其他鼠标操作,例如鼠标移动、滚动等。
  • 请注意,使用该代码需要管理员权限,因为需要访问鼠标设备驱动程序。
  • 代码示例仅用于学习和实验目的,请勿用于任何非法或恶意目的。

原文地址: https://www.cveoy.top/t/topic/o5DD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录