EasyInput 是一个面向 Windows 的自动文本输入工具,核心目的是在由于某些原因无法使用快捷键、粘贴操作或其他方式快速输入大批量文本时,依然能够将文本稳定地逐字符模拟输入到目标位置,因此具有很强的通用性。
当前仓库同时包含两套命令行实现:
- Python 版本:位于仓库根目录,便于快速运行与调试
- Rust 版本:位于
easyinput-rust/,使用 Windows 原生接口实现
本项目仅供交流学习使用,禁止二次贩卖或用于非法用途。
EasyInput 支持以下三种基础文本来源:
- 剪贴板模式
- 从系统当前剪贴板读取文本
- 在“功能键触发模式”下,每次触发都会重新读取当前最新剪贴板内容
- 预输入模式
- 直接在程序中手动输入多行文本
- 输入单独一行
END表示结束录入
- 读文件模式
- 从本地
.txt文件中读取文本 - 仅支持
.txt文件
- 从本地
- 倒计时模式
- 默认倒计时:
5秒 - 倒计时结束后自动开始输入
- 默认倒计时:
- 功能键触发模式
- 按
Ctrl + Shift + F8开始一轮自动输入 - 每轮输入完成后,可再次按
Ctrl + Shift + F8开始下一轮 - 按
Ctrl + Shift + F9结束等待或终止当前轮输入
- 按
- 使用 Windows 原生输入接口模拟键盘事件
- 逐字符输出文本
- 自动处理常见控制字符,例如:
- 换行
- Tab
- Backspace
- Escape
- Delete
- 默认节奏参数:
- 普通字符间隔:
0.03秒 - 换行额外延迟:
0.06秒 - 功能键触发后开始前延迟:
1.0秒
- 普通字符间隔:
- 在不方便直接粘贴文本的输入框中逐步输入内容
- 演示“模拟人工输入”的交互流程
- 测试桌面程序、网页输入框、聊天框等接受键盘事件的场景
- 自动化辅助场景中的文本发送前端
easyinput/
├─ README.md
├─ main.py # Python CLI 主界面
├─ keyboardsim.py # Python 输入模拟后端
└─ easyinput-rust/
├─ Cargo.toml
└─ src/
├─ main.rs # Rust CLI 主界面
└─ backend.rs # Rust 输入模拟后端
- Windows
- 不支持 macOS / Linux
建议使用:
- Python 3.9+
Python 版本当前不依赖第三方库,使用标准库即可运行。
需要安装:
- Rust / Cargo(建议使用较新稳定版)
Rust 版本依赖 windows-sys,首次构建时 Cargo 会自动下载依赖。
在仓库根目录执行:
python main.py进入主界面后:
- 直接回车:进入默认模式
- 输入
1:进入更多模式切换 - 输入
0:退出程序
默认模式为:
- 剪贴板模式
- 功能键触发模式
即启动后会等待你按:
Ctrl + Shift + F8
触发一次输入。
在仓库根目录执行:
cargo run --manifest-path easyinput-rust/Cargo.tomlRust 版本的界面交互与 Python 版本基本一致,默认也是:
- 剪贴板模式
- 功能键触发模式
无论是 Python 版本还是 Rust 版本,整体流程基本一致:
- 启动程序
- 选择文本来源
- 剪贴板
- 预输入
- txt 文件
- 选择启动方式
- 倒计时模式
- 功能键触发模式
- 手动点击目标输入框,确保焦点已经选中
- 等待倒计时结束,或按
Ctrl + Shift + F8 - 程序开始自动逐字符输入文本
- 若需终止,按
Ctrl + Shift + F9
Ctrl + Shift + F8
用于功能键触发模式下开始一轮自动输入。
Ctrl + Shift + F9
作用包括:
- 终止倒计时中的任务
- 终止正在执行的一轮自动输入
- 结束功能键触发模式的持续监听
- 从当前系统剪贴板读取 Unicode 文本
- 若剪贴板为空或不是可用文本,会提示错误
- 在“剪贴板 + 功能键触发模式”组合下,每一轮触发都会读取最新剪贴板内容
适合场景:
- 需要频繁更换输入文本
- 想要在不重启程序的前提下反复发送不同内容
- 在程序中直接输入多行文本
- 输入完成后,单独输入一行:
END
表示结束录入。
- 仅支持读取
.txt文件 - 如果文件不存在、不是文件、或后缀不是
.txt,程序会提示错误
除了运行 main.py 的交互式界面之外,也可以直接使用 keyboardsim.py。
python keyboardsim.py "你好,这是一次自动输入测试"python keyboardsim.py --file demo.txtpython keyboardsim.py "测试内容" --delay 3python keyboardsim.py "测试内容" --interval 0.05 --line-delay 0.1python keyboardsim.py --hotkey不传文本参数时,默认读取当前系统剪贴板文本。
当前项目中的默认参数如下:
| 参数 | 默认值 | 说明 |
|---|---|---|
| 倒计时 | 5.0 秒 |
倒计时模式下开始前等待时间 |
| 字符间隔 | 0.03 秒 |
普通字符之间的输入延迟 |
| 换行延迟 | 0.06 秒 |
每次换行后的额外延迟 |
| 热键开始延迟 | 1.0 秒 |
检测到 Ctrl+Shift+F8 后,真正开始输入前的延迟 |
| 热键轮询间隔 | 0.05 秒 |
后台监听热键的轮询频率 |
- 主界面:
main.py - 输入后端:
keyboardsim.py - 使用
ctypes调用 Windows API - 适合快速验证、调试与原型开发
- 主界面:
easyinput-rust/src/main.rs - 输入后端:
easyinput-rust/src/backend.rs - 使用
windows-sys调用 Windows API - 结构更清晰,适合作为性能和可维护性更好的实现方向
这是最重要的一点。
程序只是模拟键盘输入,不会自动帮你点击目标窗口或输入框。因此在真正开始输入前,你必须:
- 手动切换到目标窗口
- 手动点击目标输入框
- 确保光标已经在可输入位置
否则文本可能会被发送到错误的位置。
本项目依赖 Windows 键盘输入和剪贴板相关 API,不支持:
- macOS
- Linux
读文件模式当前只接受 .txt 文件。
如果剪贴板为空,或当前格式不是可用文本,程序会报错。
在功能键触发模式下,一轮输入完成后程序会继续等待下一次触发。
如需退出,请按:
Ctrl + Shift + F9
请按顺序检查:
- 是否处于 Windows 环境
- 是否已经选中目标输入框焦点
- 当前是否选择了功能键触发模式
- 如果是功能键触发模式,是否已按
Ctrl + Shift + F8 - 是否文本来源为空,例如剪贴板没有内容
如果你按下了:
Ctrl + Shift + F9
程序会认为你主动终止了当前任务。
请确认:
- 文件存在
- 路径正确
- 文件后缀为
.txt
这是设计行为。功能键触发模式支持连续多轮触发。
如需结束该模式,请按:
Ctrl + Shift + F9
如果你希望继续扩展本项目,可以考虑的方向包括:
- 增加 GUI 界面
- 支持配置文件
- 支持更多文本来源
- 支持可视化热键设置
- 增加日志记录
- 增加更细粒度的输入速度配置
- 在 Rust 版本中继续完善并逐步替代 Python 版本
本项目当前已补充 MIT License,详见仓库根目录下的 LICENSE 文件。
作者在程序界面中已明确声明:
- 项目开源在 GitHub
- 仅供交流学习
- 禁止二次贩卖
- 禁止用于非法用途