5 个版本
0.1.11 | 2024年7月28日 |
---|---|
0.1.10 | 2024年7月27日 |
0.1.7 | 2024年4月30日 |
0.1.4 |
|
0.1.0 |
|
在 图像 类别中排名第 87
每月下载量 1,084 次
被 2 个crate 使用
74KB
2K SLoC
clipboard-rs
clipboard-rs 是一个用 Rust 编写的跨平台库,用于获取和设置系统级剪贴板内容。它支持 Linux、Windows 和 MacOS。
功能支持
- 纯文本
- HTML
- 富文本
- 图片(PNG 格式)
- 文件(file-uri-list 格式)
- 可以通过指定类型标识符获取任何类型,方法为
available_formats
开发计划
- MacOS 支持
- Linux 支持(x11)
- Windows 支持
用法
将以下内容添加到您的 Cargo.toml
[dependencies]
clipboard-rs = "0.1.11"
变更日志
示例
所有用法示例
简单读写
use clipboard_rs::{Clipboard, ClipboardContext, ContentFormat};
fn main() {
let ctx = ClipboardContext::new().unwrap();
let types = ctx.available_formats().unwrap();
println!("{:?}", types);
let has_rtf = ctx.has(ContentFormat::Rtf);
println!("has_rtf={}", has_rtf);
let rtf = ctx.get_rich_text().unwrap_or("".to_string());
println!("rtf={}", rtf);
let has_html = ctx.has(ContentFormat::Html);
println!("has_html={}", has_html);
let html = ctx.get_html().unwrap_or("".to_string());
println!("html={}", html);
let content = ctx.get_text().unwrap_or("".to_string());
println!("txt={}", content);
}
读取图像
use clipboard_rs::{common::RustImage, Clipboard, ClipboardContext};
const TMP_PATH: &str = "/tmp/";
fn main() {
let ctx = ClipboardContext::new().unwrap();
let types = ctx.available_formats().unwrap();
println!("{:?}", types);
let img = ctx.get_image();
match img {
Ok(img) => {
img.save_to_path(format!("{}test.png", TMP_PATH).as_str())
.unwrap();
let resize_img = img.thumbnail(300, 300).unwrap();
resize_img
.save_to_path(format!("{}test_thumbnail.png", TMP_PATH).as_str())
.unwrap();
}
Err(err) => {
println!("err={}", err);
}
}
}
读取任何格式
use clipboard_rs::{Clipboard, ClipboardContext};
fn main() {
let ctx = ClipboardContext::new().unwrap();
let types = ctx.available_formats().unwrap();
println!("{:?}", types);
let buffer = ctx.get_buffer("public.html").unwrap();
let string = String::from_utf8(buffer).unwrap();
println!("{}", string);
}
监听剪贴板变化
use clipboard_rs::{
Clipboard, ClipboardContext, ClipboardHandler, ClipboardWatcher, ClipboardWatcherContext,
};
use std::{thread, time::Duration};
struct Manager {
ctx: ClipboardContext,
}
impl Manager {
pub fn new() -> Self {
let ctx = ClipboardContext::new().unwrap();
Manager { ctx }
}
}
impl ClipboardHandler for Manager {
fn on_clipboard_change(&mut self) {
println!(
"on_clipboard_change, txt = {}",
self.ctx.get_text().unwrap()
);
}
}
fn main() {
let manager = Manager::new();
let mut watcher = ClipboardWatcherContext::new().unwrap();
let watcher_shutdown = watcher.add_handler(manager).get_shutdown_channel();
thread::spawn(move || {
thread::sleep(Duration::from_secs(5));
println!("stop watch!");
watcher_shutdown.stop();
});
println!("start watch!");
watcher.start_watch();
}
贡献
欢迎您提交 PR 和问题,并将您的代码或想法贡献给项目。由于我的水平有限,该库可能也存在一些错误。欢迎指出它们,我将尽快进行修改。
感谢
- API 设计灵感来自 electron
- 项目代码的 Linux 部分参考了 x11-clipboard
合同
如果您有任何问题,可以通过电子邮件联系我:swkzymlyy@gmail.com
中国用户也可以通过微信号 uniq_idx_church_lynn
联系我
许可证
本项目采用MIT许可证。有关详细信息,请参阅LICENSE文件。
依赖项
~2–13MB
~158K SLoC