适用版本:v2.0.0(Rust 实现) · 平台:Windows 10 / 11
| 方式 | 步骤 | 适合人群 |
|---|---|---|
| EXE 发行版 | 从 GitHub Releases 下载 AutoTyper-vX.Y.Z-win64.exe,双击运行 |
所有用户(无任何运行时依赖) |
| 源码运行 | 安装 Rust 后执行 cargo run |
开发者 |
| 本地构建 | cargo build --release,产物位于 target\release\AutoTyper.exe |
需要定制的用户 |
发行版 EXE 由 GitHub Actions 在推送版本标签(v*)时自动构建并发布,构建前会先运行完整测试。
启动后主界面自上而下为:菜单栏、文本编辑区、参数设置区、按钮行(开始输入 / 停止 / 进度条),底部为状态栏。
- 在「输入文本」框中粘贴或编辑要输入的文本(也可通过菜单
文件 → 打开文件.../Ctrl+O从.txt、.py、.java等文件加载) - 调节参数:
- 字符间隔:5–100ms,建议不低于 10ms(过快可能丢字)
- 行间延迟:10–200ms,每行结束后额外等待
- 倒计时:1–30s,点击「开始输入」后的缓冲时间,用于切换到目标窗口
- 紧急停止:勾选后,输入过程中把鼠标移到屏幕任意角落立即中止
- 点击「开始输入」,在倒计时结束前把光标点进目标输入框
- 输入过程中可随时点击「停止」中止;进度条实时显示百分比
| 菜单 | 功能 |
|---|---|
文件 → 打开文件...(Ctrl+O) |
从文件加载文本 |
文件 → 保存文本...(Ctrl+S) |
将编辑区内容保存为文件 |
| 文本片段 → 保存当前文本为片段... | 按名称保存常用文本,持久化到 config.json |
| 文本片段 → 导入/导出片段... | 以 JSON 文件批量迁移片段 |
| 帮助 → 使用说明 / 关于 | 内置帮助 |
所有 CLI 调用都需要 --cli 开关:
AutoTyper.exe --cli [输入源] [参数]开发调试时等价于 cargo run -- --cli ...。
| 参数 | 说明 |
|---|---|
--text, -t "..." |
直接指定文本 |
--file, -f <路径> |
从文件读取(UTF-8) |
--snippet, -s <名称> |
使用 config.json 中已保存的片段 |
| 参数 | 默认值 | 说明 |
|---|---|---|
--interval <秒> |
配置文件值(0.01) | 字符间隔 |
--line-delay <秒> |
配置文件值(0.05) | 行间延迟 |
--countdown <秒> |
配置文件值(5) | 启动倒计时 |
--no-failsafe |
关闭 | 禁用鼠标四角紧急停止 |
--list-snippets |
— | 列出所有已保存片段后退出 |
参数优先级:命令行 > config.json > 内置默认值。
# 输入一句话
AutoTyper.exe --cli --text "Hello, World!"
# 输入代码文件,间隔 20ms,倒计时 3 秒
AutoTyper.exe --cli --file answer.py --interval 0.02 --countdown 3
# 使用已保存的片段
AutoTyper.exe --cli --snippet "常用代码段"| 退出码 | 含义 |
|---|---|
0 |
输入完成 |
1 |
输入源错误(文本为空 / 文件不可读 / 片段不存在 / 未指定输入源) |
2 |
参数解析错误或鼠标四角紧急停止 |
3 |
Ctrl+C 用户中断 |
输入失控时的三种中止方式(按响应速度排序):
- 鼠标移到屏幕任意角落(需启用 failsafe,默认开启)——立即抛出中断
- GUI 点击「停止」按钮——当前字符发送完后中止
- CLI 按
Ctrl+C
注意:紧急停止检测在每个字符之间执行,因此实际停止位置最多滞后一个字符间隔。
- 位置:程序运行目录下的
config.json(首次运行自动生成,默认值见config.example.json) config.json保存用户本地数据(含文本片段),不纳入版本控制snippets字段格式为{"名称": "内容"},可用 GUI 菜单或 CLI 导入导出
| 问题 | 原因与解决 |
|---|---|
| 目标程序收不到字符 | 部分程序(如某些游戏、以管理员权限运行的程序)拦截或忽略 WM_CHAR;尝试以相同或更高权限运行 AutoTyper |
| 丢字、内容不完整 | 将字符间隔调大到 10ms 以上 |
| 中文变成问号或乱码 | 目标输入框不支持 Unicode;确认目标程序的编码设置 |
| 输入到了错误窗口 | 倒计时结束前确保目标窗口处于前台并获得焦点 |
| 换行处多出空行 | 目标程序同时处理了 VK_RETURN 按键事件与换行;属目标程序行为,可将文本合并为单行规避 |
用户启动 → 倒计时(切换窗口) → engine.type_text()
│ 逐字符
▼
user32.PostMessageW(hwnd, WM_CHAR, 码位, 0)
user32.PostMessageW(hwnd, WM_KEYDOWN/KEYUP, VK_RETURN/VK_TAB)
与 SendInput / keybd_event 的全局键盘模拟不同,PostMessageW 直接向目标窗口消息队列投递消息:不经过剪贴板、不触发键盘 Hook、不要求 AutoTyper 窗口处于前台(只要目标窗口持有输入焦点)。