Rust剪贴板操作库clipboard_macos的使用:macOS平台下高效管理剪贴板内容的Rust插件
Rust剪贴板操作库clipboard_macos的使用:macOS平台下高效管理剪贴板内容的Rust插件
clipboard_macos是一个专门为macOS平台设计的Rust剪贴板操作库,它提供了简洁高效的API来管理剪贴板内容。
安装
在项目目录中运行以下Cargo命令:
cargo add clipboard_macos
或者在Cargo.toml中添加:
clipboard_macos = "0.1.1"
基本使用示例
以下是使用clipboard_macos库的基本示例:
use clipboard_macos::Clipboard;
fn main() {
// 创建剪贴板实例
let clipboard = Clipboard::new().unwrap();
// 向剪贴板写入文本
clipboard.write_text("Hello, clipboard!").unwrap();
// 从剪贴板读取文本
let text = clipboard.read_text().unwrap();
println!("Clipboard contents: {}", text);
}
完整示例代码
下面是一个更完整的示例,展示了更多剪贴板操作功能:
use clipboard_macos::Clipboard;
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
// 初始化剪贴板
let clipboard = Clipboard::new()?;
// 检查剪贴板是否包含文本
if clipboard.has_text()? {
println!("剪贴板当前包含文本内容");
// 读取剪贴板文本
let current_text = clipboard.read_text()?;
println!("当前剪贴板内容: {}", current_text);
// 清除剪贴板内容
clipboard.clear()?;
println!("已清除剪贴板内容");
} else {
println!("剪贴板当前不包含文本");
}
// 写入新内容到剪贴板
let new_text = "这是新的剪贴板内容";
clipboard.write_text(new_text)?;
println!("已写入新内容到剪贴板: {}", new_text);
Ok(())
}
功能特点
- 简洁的API设计
- 支持文本读写操作
- 可以检查剪贴板内容类型
- 提供清除剪贴板功能
- 专门针对macOS平台优化
完整示例demo
以下是一个更完整的演示示例,展示了如何在实际应用中使用clipboard_macos库:
use clipboard_macos::Clipboard;
use std::error::Error;
use std::io::{self, Write};
fn main() -> Result<(), Box<dyn Error>> {
let clipboard = Clipboard::new()?;
// 打印菜单
println!("macOS剪贴板操作演示");
println!("1. 读取剪贴板内容");
println!("2. 写入剪贴板内容");
println!("3. 检查剪贴板是否有文本");
println!("4. 清除剪贴板");
println!("5. 退出");
loop {
print!("请选择操作(1-5): ");
io::stdout().flush()?;
let mut input = String::new();
io::stdin().read_line(&mut input)?;
match input.trim() {
"1" => {
if clipboard.has_text()? {
let text = clipboard.read_text()?;
println!("剪贴板内容: {}", text);
} else {
println!("剪贴板中没有文本内容");
}
}
"2" => {
print!("请输入要写入剪贴板的文本: ");
io::stdout().flush()?;
let mut text = String::new();
io::stdin().read_line(&mut text)?;
clipboard.write_text(text.trim())?;
println!("已写入剪贴板");
}
"3" => {
if clipboard.has_text()? {
println!("剪贴板包含文本");
} else {
println!("剪贴板不包含文本");
}
}
"4" => {
clipboard.clear()?;
println!("已清除剪贴板");
}
"5" => {
println!("退出程序");
break;
}
_ => println!("无效输入,请选择1-5"),
}
}
Ok(())
}
这个完整示例实现了一个简单的交互式剪贴板操作程序,包含了读取、写入、检查和清除剪贴板内容的功能。
1 回复
以下是基于您提供的内容整理的完整示例demo:
基本用法示例
// 写入剪贴板示例
use clipboard_macos::Clipboard;
fn main() {
// 创建剪贴板实例
let clipboard = Clipboard::new().unwrap();
// 写入文本到剪贴板
clipboard.write_string("Hello from Rust!").unwrap();
println!("文本已复制到剪贴板");
// 从剪贴板读取文本
let content = clipboard.read_string().unwrap();
println!("剪贴板内容: {}", content);
}
高级功能示例
use clipboard_macos::{Clipboard, ContentType};
use std::time::Duration;
fn main() {
let clipboard = Clipboard::new().unwrap();
// 检查剪贴板内容类型
match clipboard.content_type() {
Ok(ContentType::Text) => println!("剪贴板包含文本"),
Ok(ContentType::Image) => println!("剪贴板包含图片"),
Ok(ContentType::Unknown) => println!("剪贴板包含未知内容"),
Err(e) => eprintln!("检查剪贴板出错: {}", e),
}
// 清除剪贴板
clipboard.clear().unwrap();
println!("剪贴板已清空");
// 监听剪贴板变化
let mut last_content = String::new();
loop {
std::thread::sleep(Duration::from_secs(1));
let current_content = clipboard.read_string().unwrap_or_default();
if current_content != last_content {
println!("剪贴板内容变化: {}", current_content);
last_content = current_content;
}
}
}
完整应用示例
use clipboard_macos::{Clipboard, ContentType};
use std::{thread, time::Duration};
struct ClipboardMonitor {
clipboard: Clipboard,
}
impl ClipboardMonitor {
fn new() -> Self {
Self {
clipboard: Clipboard::new().unwrap(),
}
}
// 写入剪贴板
fn copy(&self, text: &str) {
if let Err(e) = self.clipboard.write_string(text) {
eprintln!("写入剪贴板失败: {}", e);
}
}
// 读取剪贴板
fn paste(&self) -> String {
self.clipboard.read_string().unwrap_or_default()
}
// 监控剪贴板变化
fn monitor(&self, interval: u64) {
let mut last_content = self.paste();
println!("开始监控剪贴板(间隔{}秒)...", interval);
loop {
thread::sleep(Duration::from_secs(interval));
let current_content = self.paste();
if !current_content.is_empty() && current_content != last_content {
println!("[新内容] {}", current_content);
last_content = current_content;
// 根据内容类型处理
match self.clipboard.content_type() {
Ok(ContentType::Text) => self.process_text(¤t_content),
Ok(ContentType::Image) => println!("检测到图片内容"),
_ => {}
}
}
}
}
fn process_text(&self, text: &str) {
println!("处理文本: {} 字符", text.len());
// 这里可以添加文本处理逻辑
}
}
fn main() {
let monitor = ClipboardMonitor::new();
// 测试写入
monitor.copy("Rust剪贴板监控示例");
println!("当前剪贴板内容: {}", monitor.paste());
// 开始监控
monitor.monitor(2);
}
错误处理示例
use clipboard_macos::Clipboard;
fn main() {
// 更健壮的错误处理
let clipboard = match Clipboard::new() {
Ok(clip) => clip,
Err(e) => {
eprintln!("无法访问剪贴板: {}", e);
std::process::exit(1);
}
};
// 尝试写入大数据
let large_text = "a".repeat(100_000);
if let Err(e) = clipboard.write_string(&large_text) {
eprintln!("写入大文本失败: {}", e);
println!("建议分块处理大数据");
}
}
注意事项:
- 本库仅适用于macOS平台
- 首次使用需要授予"辅助功能"权限
- 监控剪贴板变化会占用线程资源
- 处理大文本时建议分块操作