使用SendInput可模拟鼠标键盘事件,先设置INPUT结构体类型与参数,再调用SendInput发送按键或鼠标动作,支持组合键与精确控制,需注意键码、标志位及焦点问题。

在C++中模拟鼠标和键盘事件,通常用于自动化操作、游戏外挂或测试工具开发。Windows平台提供了系统级别的API来实现这些功能,最常用的是 SendInput 函数。它比旧的 keybd_event 和 mouse_event 更现代、更可靠。
使用 SendInput 模拟键盘事件
SendInput 可以合成键盘按键动作,比如按下A键、回车、Ctrl+C等组合键。
示例:按下并释放 'A' 键
INPUT input = {0};
// 按下 A 键
input.type = INPUT_KEYBOARD;
input.ki.wVk = 'A'; // 虚拟键码
SendInput(1, &input, sizeof(INPUT));
// 释放 A 键
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &input, sizeof(INPUT));
- wVk 使用虚拟键码(如 'A', VK_RETURN, VK_CONTROL)
- KEYEVENTF_KEYUP 表示释放按键
- 若要发送扫描码,可使用 wScan 配合 MapVirtualKey
使用 SendInput 模拟鼠标事件
可以模拟左键点击、右键点击、移动鼠标、滚轮滚动等操作。
AutoIt v3 版本, 这是一个使用类似 BASIC 脚本语言的免费软件, 它设计用于 Windows GUI(图形用户界面)中进行自动化操作. 利用模拟键盘按键, 鼠标移动和窗口/控件的组合来实现自动化任务. 而这是其它语言不可能做到或无可靠方法实现的(比如VBScript和SendKeys). AutoIt 非常小巧, 完全运行在所有windows操作系统上.(thesnow注:现在已经不再支持win 9x,微软连XP都能放弃, 何况一个win 9x支持), 并且不需要任何运行库. AutoIt
INPUT input = {0};
// 按下左键
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
SendInput(1, &input, sizeof(INPUT));
// 释放左键
input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1, &input, sizeof(INPUT));
- MOUSEEVENTF_RIGHTDOWN / MOUSEEVENTF_RIGHTUP:右键点击
- MOUSEEVENTF_MIDDLEDOWN / MOUSEEVENTF_MIDDLEUP:中键点击
- MOUSEEVENTF_WHEEL:滚轮滚动(使用 mi.mouseData)
- MOUSEEVENTF_MOVE 或 MOUSEEVENTF_ABSOLUTE:移动鼠标
模拟组合键(如 Ctrl + C)
需要依次按下修饰键、字符键,再释放。
立即学习“C++免费学习笔记(深入)”;
示例:发送 Ctrl + C
INPUT inputs[4] = {0};
// 按下 Ctrl
inputs[0].type = INPUT_KEYBOARD;
inputs[0].ki.wVk = VK_CONTROL;
// 按下 C
inputs[1].type = INPUT_KEYBOARD;
inputs[1].ki.wVk = 'C';
// 释放 C
inputs[2].type = INPUT_KEYBOARD;
inputs[2].ki.wVk = 'C';
inputs[2].ki.dwFlags = KEYEVENTF_KEYUP;
// 释放 Ctrl
inputs[3].type = INPUT_KEYBOARD;
inputs[3].ki.wVk = VK_CONTROL;
inputs[3].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(4, inputs, sizeof(INPUT));










