1 unstable release
0.1.0 | Sep 5, 2024 |
---|
#2 in #listening
9KB
131 lines
Clipboard Listener
A cross-platform Rust crate for listening to clipboard events.
Windows
The listening is event-driven.
Using the Win API, a hidden window is created and registered to receive clipboard update events (WM_CLIPBOARDUPDATE
).
macOS
The listening is polling-based.
Using the Cocoa framework, the general pasteboard (NSPasteboard
) change count is monitored as an indirect indication of clipboard updates.
Linux
The listening is polling-based.
Using the x11_clipboard crate, the clipboard contents are retrieved and hashed using the twox_hash crate, and compared for changes as an indirect indication of clipboard updates.
Installation
Add this to your Cargo.toml
:
[dependencies]
clipboard_listener = "0.1.0"
Usage
First, import the clipboard_listener crate in your project.
Define a callback function that specifies what should happen when the clipboard content changes.
This function can perform any custom behavior you need, such as logging the change or getting the clipboard content.
Example
use clipboard_listener::listen_clipboard;
fn main() {
// Prints a message indicating that the clipboard listener is starting
println!("Starting clipboard listener...");
// Defines the callback function to be called when the clipboard changes
let callback = || {
// Prints a message indicating that the clipboard content has updated
println!("Clipboard updated!");
// Add your own custom behavior here
};
// Starts the clipboard listener with the defined callback function
if let Err(e) = clipboard_listener::listen_clipboard(Box::new(callback)) {
// Prints an error message if the listener fails to start
eprintln!("Error: {}", e);
}
}
Note
For macOS and linux, the polling interval can be adjusted by modifying the sleep duration in macos.rs and linux.rs.
It is recommended to not poll too frequently (<1 second) to reduce CPU usage.
Dependencies
~0–12MB
~108K SLoC