C++ 模拟鼠标点击:使用 WriteFile 函数向鼠标驱动发送输入数据
以下代码示例演示了如何使用 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;
}
代码解释:
-
包含必要的头文件:
Windows.h:提供 Windows API 函数winuser.h:包含鼠标事件常量ntddmou.h:定义MOUSE_INPUT_DATA结构
-
打开鼠标设备句柄:
- 使用
CreateFile函数打开鼠标设备句柄。 - 设备路径为
\\.\mouse0,表示第一个鼠标设备。
- 使用
-
设置鼠标输入数据:
- 创建一个
MOUSE_INPUT_DATA结构变量mouseData,用于存储鼠标输入数据。 - 设置
Flags成员为MOUSEEVENTF_LEFTDOWN表示鼠标左键按下,MOUSEEVENTF_LEFTUP表示鼠标左键释放。 - 其他成员根据需要设置。
- 创建一个
-
发送鼠标输入数据:
- 使用
WriteFile函数将鼠标输入数据发送到鼠标设备驱动程序。 - 确保
result值为TRUE,表示发送成功。
- 使用
-
关闭鼠标设备句柄:
- 使用
CloseHandle函数关闭鼠标设备句柄。
- 使用
注意事项:
- 该代码示例仅演示了如何模拟鼠标左键点击,您可以根据需要修改
Flags成员来模拟其他鼠标操作,例如鼠标移动、滚动等。 - 请注意,使用该代码需要管理员权限,因为需要访问鼠标设备驱动程序。
- 代码示例仅用于学习和实验目的,请勿用于任何非法或恶意目的。
原文地址: https://www.cveoy.top/t/topic/o5DD 著作权归作者所有。请勿转载和采集!