diff --git a/native/libmacbridge/bridge.h b/native/libmacbridge/bridge.h index 33848c9..3fc9f9d 100644 --- a/native/libmacbridge/bridge.h +++ b/native/libmacbridge/bridge.h @@ -80,6 +80,11 @@ void delete_string(int32_t count); */ void trigger_paste(); +/* + * Trigger normal copy ( Pressing CMD+C ) + */ +void trigger_copy(); + // UI /* diff --git a/native/libmacbridge/bridge.mm b/native/libmacbridge/bridge.mm index 8b31e07..0280789 100644 --- a/native/libmacbridge/bridge.mm +++ b/native/libmacbridge/bridge.mm @@ -180,6 +180,39 @@ void trigger_paste() { }); } + +void trigger_copy() { + dispatch_async(dispatch_get_main_queue(), ^(void) { + CGEventRef keydown; + keydown = CGEventCreateKeyboardEvent(NULL, 0x37, true); // CMD + CGEventPost(kCGHIDEventTap, keydown); + CFRelease(keydown); + + usleep(2000); + + CGEventRef keydown2; + keydown2 = CGEventCreateKeyboardEvent(NULL, 0x08, true); // C key + CGEventPost(kCGHIDEventTap, keydown2); + CFRelease(keydown2); + + usleep(2000); + + CGEventRef keyup; + keyup = CGEventCreateKeyboardEvent(NULL, 0x08, false); + CGEventPost(kCGHIDEventTap, keyup); + CFRelease(keyup); + + usleep(2000); + + CGEventRef keyup2; + keyup2 = CGEventCreateKeyboardEvent(NULL, 0x37, false); // CMD + CGEventPost(kCGHIDEventTap, keyup2); + CFRelease(keyup2); + + usleep(2000); + }); +} + int32_t get_active_app_bundle(char * buffer, int32_t size) { NSRunningApplication *frontApp = [[NSWorkspace sharedWorkspace] frontmostApplication]; NSString *bundlePath = [frontApp bundleURL].path; @@ -291,4 +324,5 @@ int32_t prompt_accessibility() { void open_settings_panel() { NSString *urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"; [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]]; -} \ No newline at end of file +} + diff --git a/src/bridge/macos.rs b/src/bridge/macos.rs index f99a6f8..c698d35 100644 --- a/src/bridge/macos.rs +++ b/src/bridge/macos.rs @@ -59,4 +59,5 @@ extern { pub fn send_multi_vkey(vk: i32, count: i32); pub fn delete_string(count: i32); pub fn trigger_paste(); + pub fn trigger_copy(); } \ No newline at end of file diff --git a/src/keyboard/macos.rs b/src/keyboard/macos.rs index 6cba0da..ccc4faf 100644 --- a/src/keyboard/macos.rs +++ b/src/keyboard/macos.rs @@ -56,6 +56,12 @@ impl super::KeyboardManager for MacKeyboardManager { } } + fn trigger_copy(&self) { + unsafe { + trigger_copy(); + } + } + fn delete_string(&self, count: i32) { unsafe {delete_string(count)} }