#文本图像 #剪贴板 #跨平台 #HTML #富文本 #读写 #API

clipboard-rs

跨平台剪贴板 API(文本 | 图片 | 富文本 | HTML | 文件 | 监听变化)| 支持Windows、MacOS、Linux

5 个版本

0.1.11 2024年7月28日
0.1.10 2024年7月27日
0.1.7 2024年4月30日
0.1.4 2024年3月18日
0.1.0 2024年2月7日

图像 类别中排名第 87

Download history 115/week @ 2024-05-03 130/week @ 2024-05-10 110/week @ 2024-05-17 186/week @ 2024-05-24 142/week @ 2024-05-31 116/week @ 2024-06-07 157/week @ 2024-06-14 149/week @ 2024-06-21 131/week @ 2024-06-28 161/week @ 2024-07-05 231/week @ 2024-07-12 320/week @ 2024-07-19 400/week @ 2024-07-26 250/week @ 2024-08-02 218/week @ 2024-08-09 196/week @ 2024-08-16

每月下载量 1,084
2 个crate 使用

MIT 许可证

74KB
2K SLoC

clipboard-rs

Latest version Documentation GitHub Actions Workflow Status MSRV GitHub License

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 和问题,并将您的代码或想法贡献给项目。由于我的水平有限,该库可能也存在一些错误。欢迎指出它们,我将尽快进行修改。

感谢

合同

如果您有任何问题,可以通过电子邮件联系我:swkzymlyy@gmail.com

中国用户也可以通过微信号 uniq_idx_church_lynn 联系我

许可证

本项目采用MIT许可证。有关详细信息,请参阅LICENSE文件。

依赖项

~2–13MB
~158K SLoC