零代码也能玩硬件:用 60 元 Arduino 把键盘鼠标自动化做成“物理外挂”
核心问题:没有嵌入式经验,能不能在 Windows 上快速搭一套“即插即用”的键盘鼠标自动化硬件?
一句话答案:可以,只要一块 Arduino Leonardo、一个 Qt 小工具,30 分钟就能跑通;下文给你可复制的每一步。
1. 方案速览:两块板子、一条 USB 线,到底能做什么?
| 场景 | 手工操作痛点 | 硬件自动化做法 | 收益 |
|---|---|---|---|
| 游戏刷材料 | 重复按键 3 小时 | 插上小板→选窗口→设定 200 ms 间隔→自动连点 | 零值守,防封号(Windows 层操作,不注入进程) |
| 报表录入 | 每天 Ctrl+C / Ctrl+V 500 次 | 录一段“组合键宏”,设 07:50 定时启动 | 早到工位,数据已就位 |
| 老化测试 | 手动来回 Alt+Tab | 顺序执行 Tab→Space→Enter→随机 0.5-1 s 间隔 | 通宵跑,无疲劳 |
作者反思:最早我用纯软件宏被安全软件拦,换硬件层后一条报警都没再弹;物理“摸”键盘,系统就当是人。
2. 项目组成:软件 + 固件,为什么一定要分两边?
2.1 客户端(Qt 桌面端)
-
可视界面:选窗口、勾按键、填间隔、定时起止。 -
真正干的活:把“按键序列”转成串口指令,发给 Arduino。
2.2 固件(Arduino 端)
-
基于 ATmega32U4 的 Leonardo 自带 USB-HID 功能,插上电脑就被识别成键盘/鼠标。 -
收到串口指令后,直接调用 Keyboard.press()/Mouse.click(),绕过操作系统权限限制。
一句话:Qt 端负责“脑”,Arduino 负责“手”;两边通过 USB-CDC 串口对话,115200 波特率,延迟 <10 ms。
3. 准备清单:60 元起步,一台 Windows 10 以上机器
| 类别 | 名称 | 数量 | 预估价 | 备注 |
|---|---|---|---|---|
| 硬件 | Arduino Leonardo 兼容板 | 1 | 55-65 元 | 必须 32U4 主控,Uno 不行 |
| 线材 | Micro-USB 数据线 | 1 | 5 元 | 传数据 + 供电 |
| 软件 | Qt 5.15.2 开源版 | 1 | 0 元 | 安装时勾选 MinGW 即可 |
| 工具 | Arduino IDE 2.x | 1 | 0 元 | 烧录用,也可用 Arduino CLI |
淘宝关键词:Arduino Leonardo R3 ATMEGA32U4,选有“送数据线”套餐即可。
4. 烧录固件:第一次玩板子,5 步搞定
核心问题:Arduino 第一次上手,最简烧录路径是什么?
-
安装 Arduino IDE → 启动后点击“工具→开发板→Arduino AVR Boards→Arduino Leonardo”。 -
插板子到 USB → “工具→端口”里出现 COMx(x 数字因人而异)→ 选中。 -
打开固件文件: arduino/keypresser.ino(源码已在压缩包)。 -
点“✓ 验证”→ 底部提示“编译完成”。 -
点“→ 上传”→ 状态栏出现“上传成功”,板载 L 灯闪两下,完事。
常见坑:
-
上传时提示“端口消失”→ 别急,Leonardo 会重启,30 秒后自动回来。 -
驱动未识别→ Windows 10 以上自带,若仍问号,手动选“Arduino bootloader”驱动即可。
5. 编译 Qt 客户端:从源码到 exe,只要点三下
-
打开 KeyPresserHardware.pro(Qt Creator→文件→打开项目)。 -
左下角 kit 选 MinGW 64-bit → 点“构建”小锤子。 -
构建完毕,进入 build-KeyPresserHardware-Desktop-Release/release/找到KeyPresserHardware.exe,双击即可跑。
作者教训:第一次用 MSVC 套件编译,结果跑到没装运行库的电脑直接闪退;改 MinGW 后裸机可跑,绿色发布。
6. 使用教程:30 分钟跑通第一个“自动刷 F5”脚本
6.1 连接硬件
插 Leonardo → 启动 exe → 状态栏自动显示“Arduino Leonardo 已连接”;若未识别,点“重新扫描”。
6.2 选择目标窗口
点“选择窗口”→ 光标变成十字→ 移到浏览器标签栏点一下→ 软件窗口标题自动填入,表示后续按键只发到此窗口。
6.3 配置按键序列
-
勾选“顺序模式”。 -
右侧列表添一行: -
类型:单键 -
键值:F5 -
最小间隔:1000 ms -
最大间隔:1500 ms(随机防检测)
-
-
如需组合键,选“组合键”→ 下拉选 Ctrl → 再选 R,实现强制刷新。
6.4 定时任务(可选)
勾选“定时任务”→ 设开始 08:00、结束 08:30→ 到点自动启停,午休不再占用机器。
6.5 启动 & 停止
点“开始”→ 目标窗口每秒收到一次 F5;软件最小化到托盘,右键可瞬间停止。
场景示例:把公司仪表板网页设成 5 秒一刷,领导路过永远看到最新数字,其实你去喝咖啡了。
7. 进阶玩法:随机间隔、独立/顺序模式、置顶窗口
| 功能 | 说明 | 适用场景 |
|---|---|---|
| 随机间隔 | 最小 800 ms、最大 1200 ms,每次在区间随机 | 游戏防检测、模拟真人 |
| 独立模式 | 多按键同时按下,无先后 | 格斗游戏“搓招” |
| 顺序模式 | 严格按照列表一行一行来 | 表单跳转、后台录单 |
| 置顶窗口 | 客户端界面保持最前,方便调试 | 多屏用户福音 |
作者见解:随机间隔是精髓,比固定 1 秒更“人”;但区间别太大,否则业务逻辑会乱,我通常给 ±20% 浮动。
8. 配置文件:一次编排,多机复现
点“保存配置”→ 生成 .cfg JSON 文件,内容示例:
{
"window": "Chrome",
"mode": "sequence",
"hotkeys": [
{"type": "key", "value": "F5", "min": 1000, "max": 1500}
],
"schedule": {
"enable": true,
"start": "08:00",
"end": "08:30"
}
}
把 cfg 放 U 盘,下班带回家,家里电脑加载后秒级还原,真正做到“脚本随身”。
9. 故障排查:90% 问题这三条日志就能定位
| 现象 | 自查清单 | 解决 |
|---|---|---|
| 状态栏一直“未连接” | 设备管理器有无 COM?驱动图标黄不黄? | 换线、换 USB2.0 口、重装驱动 |
| 按键无反应 | 窗口标题是否匹配?是否被安全软件拦截? | 重新选择窗口,把 exe 加入白名单 |
| 定时没启动 | 系统时间对不对?时区是否东八区? | 同步 Internet 时间,重启软件 |
反思:曾经我把窗口选成“记事本”却盯着浏览器发呆,以为板子坏了;其实软件精准投递,只是投错了地方。
10. 许可证与伦理提醒:CC BY-NC-SA 4.0,非商业共享
-
可自由修改、再发布,但必须同名协议、注明原作者。 -
禁止出售固件或捆绑硬件盈利。 -
游戏场景请遵守运营商用户协议,高风险封号行为自负。
11. 实用摘要 / 操作清单(A4 打印版)
-
买 Leonardo → 2. 烧录固件 → 3. 编译 Qt → 4. 插线启动 → 5. 选窗→ 6. 添按键 → 7. 随机间隔 → 8. 定时 → 9. 保存配置 → 10. 开始运行
总耗时 ≤ 30 分钟,成本 ≤ 60 元
12. One-page Summary
KeyPresser Hardware = Qt 前端 + Arduino 固件,利用 Leonardo 的 USB-HID 把串口命令转成真实键鼠事件。支持单键、组合键、随机间隔、定时启停、配置导入导出。零驱动、零汇编、零注入,Windows 10/11 即插即用,适合重复性 GUI 自动化、游戏辅助、网页刷新、老化测试。项目开源且仅允许非商业使用。
13. 常见问答(FAQ)
-
Uno/Nano 能不能替代 Leonardo?
不能,只有 32U4 原生 USB-HID,Uno 需额外刷 Hoodloader,复杂且不稳定。 -
会被游戏反作弊拦截吗?
硬件层模拟,系统层面就是“人”在按键;但请遵守游戏协议,高风险动作自担。 -
最多支持多少按键同时按?
固件采用 6KRO,标准键盘协议上限 6 个同时按下,足够日常/游戏宏。 -
串口波特率能再提高吗?
115200 已低至 1 ms 内完成传输;再提升对 HID 刷新无感知,反而增加丢包。 -
想加鼠标滚轮怎么办?
固件已留Mouse.scroll(int8_t)接口,Qt 端下拉框加一行即可,零门槛扩展。 -
能否在 macOS 跑客户端?
源码无 WinAPI 依赖,Qt 跨平台,只需把窗口选择模块改成 Quartz API 即可,作者未实测。 -
定时任务会错过系统睡眠怎么办?
软件启动时调用SetThreadExecutionState禁止睡眠,跑完自动恢复,通宵老化无忧。
图片来源示例(可替换):
图片来源:Unsplash

