use encoding::all::GBK; use encoding::Encoding; use windows::Win32::Foundation::HWND; use windows::Win32::System::DataExchange::{CloseClipboard, GetClipboardData, OpenClipboard}; fn main() { unsafe { if OpenClipboard(HWND(0)).is_ok() { let handle_result = GetClipboardData(1); if let Ok(handle) = handle_result { if !handle.is_invalid() { let ptr = handle.0 as *const u8; if !ptr.is_null() { // Read the null-terminated string from the pointer let mut len = 0; while *ptr.add(len) != 0 { len += 1; } let slice = std::slice::from_raw_parts(ptr, len); // let text = std::str::from_utf8(slice).expect("Invalid UTF-8"); // let text = String::from_utf8_lossy(slice).to_string(); let text = GBK.decode(slice, encoding::DecoderTrap::Ignore); println!("Clipboard content: {:?}", text); } } else { println!("Invalid handle"); } } else { println!("Failed to get clipboard data"); } CloseClipboard().expect("TODO: panic message"); } else { println!("Failed to open clipboard"); } } }
[dependencies] futures = "0.3.5" ferris-says = "0.3.1" encoding = "0.2" [dependencies.windows] version = "0.57.0" features = ["Data_Xml_Dom", "Win32_Foundation", "Win32_Security", "Win32_System_Threading", "Win32_UI_WindowsAndMessaging", "Win32_System_DataExchange", "Win32_System_Ole", "Win32_UI_Controls", "Win32_UI_Controls_RichEdit"] [dependencies.windows-sys] version = "0.52.0" features = ["Win32_UI_WindowsAndMessaging", "Win32_UI_Shell", "Win32_Foundation"] [dependencies.windows-version] version = "0.1"