RCopy 是一个基于 Rust + Slint 的 Windows 11 原生系统增强工具,目标是替换或增强系统自带的剪贴板历史、截图 OCR、吸色器等小工具。项目不使用 WebView,UI 走 Slint Fluent 风格,后台能力直接调用 Win32 / WinRT API。
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 剪贴板历史 | Win + V |
接管系统剪贴板历史,支持文本、图片、搜索、固定、删除和自动粘贴;条目支持粘贴纯文本、图片 OCR、粘贴为临时文件。 |
| 命令面板 | Win + Shift + P |
搜索并执行 RCopy 功能、设置子页、剪贴板动作和常用系统命令。 |
| 截图 OCR | Win + Shift + T |
框选屏幕区域,使用 Windows 系统 OCR 识别文字并复制;支持首选语言、Shift 移动选区、失败重试。 |
| 吸色器 | Win + Shift + C |
取屏幕像素颜色,支持 HEX / RGB / HSL / HSV / CMYK、滚轮缩放放大镜、空格冻结、颜色历史与颜色编辑器。 |
| 窗口置顶 | Win + Ctrl + T |
切换当前前台窗口置顶,可显示彩色边框、配置排除应用与全屏保护。 |
| 屏幕尺 | Win + Ctrl + Shift + M |
矩形测量 + Tab/H/V 切换水平、垂直边缘检测,点击复制。 |
| 快捷键面板 | Win + Shift + / |
查看 RCopy 与常用 Windows 快捷键,支持搜索。 |
| 查找鼠标 | Win + Shift + F |
在当前鼠标位置显示定位标记;Win + Shift + H 切换演示模式(点击高亮),颜色/半径/时长可配。 |
| 静态截图窗口 | Win + Ctrl + Shift + S |
框选屏幕区域后创建置顶参考截图窗口,支持复制与重新截取。 |
| 任意拖动窗口 | Alt + 拖动(可配) |
按住修饰键在窗口任意区域左键拖动移动、右键拖动调整大小(默认关闭)。 |
| 亮/暗主题切换 | Win + Ctrl + Shift + D |
手动秒切系统与应用主题;支持固定时间与日出日落自动切换。 |
| 显示器亮度 | Win + Ctrl + Shift + ↑/↓ |
通过 DDC/CI 调节光标所在外接显示器亮度(默认关闭)。 |
| 工作区 | 设置页 | 保存当前应用组,一键启动并尽力恢复窗口位置。 |
| 保持唤醒 | 托盘 / 设置页 | 无限期 / 定时 / 到期时刻三种模式,托盘快捷时长,屏幕常亮独立开关。 |
| 开机启动 | 设置页 | 写入当前用户的 Run 注册表项,启动参数为 --silent。 |
从 Releases 下载:
RCopy-vX.Y.Z-setup.exe:安装版(按用户安装,无需管理员权限,可选开机自启)。RCopy-vX.Y.Z-portable.zip:免安装绿色版,解压后直接运行RCopy.exe。
要求:
- Windows 11
- Rust stable,建议使用 MSVC 工具链
- OCR 功能依赖 Windows 已安装的 OCR 语言包
常用命令:
cargo run
cargo run -- --silent
cargo build --releasecargo run 默认打开设置窗口。带 --silent 时仅启动后台托盘、热键、剪贴板监听等能力。
Release 构建启用了 windows_subsystem = "windows",运行 target\release\rcopy.exe 时不会弹出控制台窗口。
运行时数据保存在:
%APPDATA%\rcopy\
当前包含:
config.json:全局配置,使用serde(default)兼容旧版本配置升级。history.json:剪贴板文本历史。图片历史只保存在本次进程内存中,不做长期持久化。workspaces.json:工作区(应用组)定义。temp\:“粘贴为临时文件”的落盘目录,按 3 天 / 256 MB 自动清理。
build.rs Slint 编译入口,使用 fluent 样式
ui/app.slint 所有 Slint 组件、设置页、弹窗和遮罩窗口
src/main.rs 主线程应用状态、窗口生命周期、事件分发
src/worker.rs 后台 Win32 隐藏窗口、消息循环、热键、托盘、剪贴板监听
src/config.rs 配置加载、保存和默认值
src/history.rs 剪贴板历史、去重、裁剪、PNG 编解码、相对时间
src/capture.rs GDI 截屏和冻结帧像素访问
src/ocr.rs Windows OCR / WinRT 封装(语言选择与回退)
src/input.rs 前台窗口、键盘注入和热键辅助
src/autostart.rs 开机启动注册表写入
src/color.rs HEX / RGB / HSL / HSV / CMYK 颜色转换
src/tempfiles.rs 剪贴板临时文件落盘与生命周期清理
src/topmost.rs 窗口置顶边框 overlay、排除列表、全屏保护
src/theme.rs 亮/暗主题切换与日出日落计算
src/display.rs DDC/CI 显示器亮度
src/workspace.rs 工作区保存、启动与窗口位置恢复
- 主线程只运行 Slint 事件循环,并持有
App状态。 - 后台线程创建隐藏 Win32 窗口并跑消息循环,集中处理全局热键、低级键盘钩子、剪贴板监听、托盘菜单、窗口置顶和阻止休眠。
- 后台事件通过
post_event写入全局队列,再用slint::invoke_from_event_loop回到主线程处理 UI。 - UI 窗口都以
Option<Component>形式按需创建,关闭后延迟销毁,并调用K32EmptyWorkingSet让大对象释放后尽快反映到任务管理器。 - 配置和历史使用
OnceLock<Mutex<_>>保存全局状态,简单直接,适合当前单进程桌面工具。 - 代码里保留了少量面向维护的中文注释,重点说明线程模型、Win32 技巧和非显然的资源释放逻辑。
新增功能模块时,通常按这个顺序接入:
- 在
src/config.rs增加配置字段,并保持#[serde(default)]兼容旧配置。 - 如果需要热键或后台消息,在
src/worker.rs::apply_hotkeys注册,并在wndproc分发。 - 如果需要回到 UI 主线程,在
AppEvent增加事件,并在App::drain_events处理。 - 在
ui/app.slint增加设置项或新窗口组件。
Win + V无法通过RegisterHotKey常规注册,因此使用低级键盘钩子拦截并吞掉系统原生剪贴板历史。- 其他热键注册失败时会自动降级到键盘钩子兜底,避免和其他程序冲突时功能直接失效。
- 自动粘贴通过前台窗口恢复和
Ctrl + V注入实现,目标窗口权限更高时可能受 Windows UIPI 限制。 - OCR 使用系统内置引擎,无需联网;语言识别能力取决于当前用户已安装的 Windows OCR 语言包。