fix(utils): use virtual key codes for cross-layout paste
This commit is contained in:
parent
e92f94573e
commit
d252f8e1ae
1 changed files with 12 additions and 8 deletions
|
|
@ -16,27 +16,31 @@ use tauri::AppHandle;
|
|||
use tauri::Manager;
|
||||
use tauri_plugin_clipboard_manager::ClipboardExt;
|
||||
|
||||
/// Sends a paste command (Cmd+V or Ctrl+V) using platform-specific virtual key codes.
|
||||
/// This ensures the paste works regardless of keyboard layout (e.g., Russian, AZERTY, DVORAK).
|
||||
fn send_paste() -> Result<(), String> {
|
||||
// Determine the modifier key based on the OS
|
||||
// Platform-specific key definitions
|
||||
#[cfg(target_os = "macos")]
|
||||
let modifier_key = Key::Meta; // Command key on macOS
|
||||
#[cfg(not(target_os = "macos"))]
|
||||
let modifier_key = Key::Control; // Control key on other systems
|
||||
let (modifier_key, v_key_code) = (Key::Meta, 9);
|
||||
#[cfg(target_os = "windows")]
|
||||
let (modifier_key, v_key_code) = (Key::Control, 0x56); // VK_V
|
||||
#[cfg(target_os = "linux")]
|
||||
let (modifier_key, v_key_code) = (Key::Control, 47);
|
||||
|
||||
let mut enigo = Enigo::new(&Settings::default())
|
||||
.map_err(|e| format!("Failed to initialize Enigo: {}", e))?;
|
||||
|
||||
// Press both keys
|
||||
// Press modifier + V
|
||||
enigo
|
||||
.key(modifier_key, enigo::Direction::Press)
|
||||
.map_err(|e| format!("Failed to press modifier key: {}", e))?;
|
||||
enigo
|
||||
.key(Key::Unicode('v'), enigo::Direction::Press)
|
||||
.key(Key::Other(v_key_code), enigo::Direction::Press)
|
||||
.map_err(|e| format!("Failed to press V key: {}", e))?;
|
||||
|
||||
// Release both keys
|
||||
// Release V + modifier (reverse order)
|
||||
enigo
|
||||
.key(Key::Unicode('v'), enigo::Direction::Release)
|
||||
.key(Key::Other(v_key_code), enigo::Direction::Release)
|
||||
.map_err(|e| format!("Failed to release V key: {}", e))?;
|
||||
enigo
|
||||
.key(modifier_key, enigo::Direction::Release)
|
||||
|
|
|
|||
Loading…
Reference in a new issue