diff options
Diffstat (limited to 'src/key_code.rs')
| -rw-r--r-- | src/key_code.rs | 153 | 
1 files changed, 153 insertions, 0 deletions
| diff --git a/src/key_code.rs b/src/key_code.rs new file mode 100644 index 0000000..e148555 --- /dev/null +++ b/src/key_code.rs @@ -0,0 +1,153 @@ +use cocoa::appkit::{ +    NSEvent, +    NSEventModifierFlags, +    NSEventSubtype::NSScreenChangedEventType, +    NSEventType::NSSystemDefined, +}; +use cocoa::base::nil; +use cocoa::foundation::NSPoint; +use core_graphics::event::{CGEvent, CGEventTapLocation, CGKeyCode, KeyCode}; + +// impl KeyCode { +//     pub const RETURN: CGKeyCode = 0x24; +//     pub const TAB: CGKeyCode = 0x30; +//     pub const SPACE: CGKeyCode = 0x31; +//     pub const DELETE: CGKeyCode = 0x33; +//     pub const ESCAPE: CGKeyCode = 0x35; +//     pub const COMMAND: CGKeyCode = 0x37; +//     pub const SHIFT: CGKeyCode = 0x38; +//     pub const CAPS_LOCK: CGKeyCode = 0x39; +//     pub const OPTION: CGKeyCode = 0x3A; +//     pub const CONTROL: CGKeyCode = 0x3B; +//     pub const RIGHT_COMMAND: CGKeyCode = 0x36; +//     pub const RIGHT_SHIFT: CGKeyCode = 0x3C; +//     pub const RIGHT_OPTION: CGKeyCode = 0x3D; +//     pub const RIGHT_CONTROL: CGKeyCode = 0x3E; +//     pub const FUNCTION: CGKeyCode = 0x3F; +//     pub const VOLUME_UP: CGKeyCode = 0x48; +//     pub const VOLUME_DOWN: CGKeyCode = 0x49; +//     pub const MUTE: CGKeyCode = 0x4A; +// } + +//   kVK_F13                       = 0x69, +//   kVK_F14                       = 0x6B, +//   kVK_F15                       = 0x71, +//   kVK_F16                       = 0x6A, +//   kVK_F17                       = 0x40, +//   kVK_F18                       = 0x4F, +//   kVK_F19                       = 0x50, +//   kVK_F20                       = 0x5A, +// +// enum { +//   kVK_Return                    = 0x24, +//   kVK_Tab                       = 0x30, +//   kVK_Space                     = 0x31, +//   kVK_Delete                    = 0x33, +//   kVK_Escape                    = 0x35, +//   kVK_Command                   = 0x37, +//   kVK_Shift                     = 0x38, +//   kVK_CapsLock                  = 0x39, +//   kVK_Option                    = 0x3A, +//   kVK_Control                   = 0x3B, +//   kVK_RightCommand              = 0x36, +//   kVK_RightShift                = 0x3C, +//   kVK_RightOption               = 0x3D, +//   kVK_RightControl              = 0x3E, +//   kVK_Function                  = 0x3F, +//   kVK_F17                       = 0x40, +//   kVK_VolumeUp                  = 0x48, +//   kVK_VolumeDown                = 0x49, +//   kVK_Mute                      = 0x4A, +//   kVK_F18                       = 0x4F, +//   kVK_F19                       = 0x50, +//   kVK_F20                       = 0x5A, +//   kVK_F5                        = 0x60, +//   kVK_F6                        = 0x61, +//   kVK_F7                        = 0x62, +//   kVK_F3                        = 0x63, +//   kVK_F8                        = 0x64, +//   kVK_F9                        = 0x65, +//   kVK_F11                       = 0x67, +//   kVK_F13                       = 0x69, +//   kVK_F16                       = 0x6A, +//   kVK_F14                       = 0x6B, +//   kVK_F10                       = 0x6D, +//   kVK_F12                       = 0x6F, +//   kVK_F15                       = 0x71, +//   kVK_Help                      = 0x72, +//   kVK_Home                      = 0x73, +//   kVK_PageUp                    = 0x74, +//   kVK_ForwardDelete             = 0x75, +//   kVK_F4                        = 0x76, +//   kVK_End                       = 0x77, +//   kVK_F2                        = 0x78, +//   kVK_PageDown                  = 0x79, +//   kVK_F1                        = 0x7A, +//   kVK_LeftArrow                 = 0x7B, +//   kVK_RightArrow                = 0x7C, +//   kVK_DownArrow                 = 0x7D, +//   kVK_UpArrow                   = 0x7E +// }; + + + +    // unsafe fn otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_( +    //     _: Self, +    //     eventType: NSEventType, +    //     location: NSPoint, +    //     modifierFlags: NSEventModifierFlags, +    //     timestamp: NSTimeInterval, +    //     windowNumber: NSInteger, +    //     context: id /* (NSGraphicsContext *) */, +    //     subtype: NSEventSubtype, +    //     data1: NSInteger, +    //     data2: NSInteger) -> id /* (NSEvent *) */ + + +// https://stackoverflow.com/questions/11045814/emulate-media-key-press-on-mac/11048135#11048135 +// https://stackoverflow.com/questions/10459085/cocoa-simulate-macbook-upper-keys-multimedia-keys/50574159#50574159 +unsafe fn press_play() { +    let NX_KEYTYPE_PLAY = 16; +    let code = NX_KEYTYPE_PLAY; + +    let key_down = NSEvent::otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_( +        nil, +        NSSystemDefined, +        NSPoint::new(0.0, 0.0), +        NSEventModifierFlags::NSDeviceIndependentModifierFlagsMask, +        0.0, +        0, +        nil, +        NSScreenChangedEventType, +        (code << 16 as i32) | (0xa << 8 as i32), +        -1 +    ); +    let event = key_down.CGEvent() as *mut CGEvent; +    let event = &*event; +    event.post(CGEventTapLocation::HID); + +    let key_up = NSEvent::otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_( +        nil, +        NSSystemDefined, +        NSPoint::new(0.0, 0.0), +        NSEventModifierFlags::NSDeviceIndependentModifierFlagsMask, +        0.0, +        0, +        nil, +        NSScreenChangedEventType, +        (code << 16 as i32) | (0xb << 8 as i32), +        -1 +    ); +    let event = key_down.CGEvent() as *mut CGEvent; +    let event = &*event; +    event.post(CGEventTapLocation::HID); +} + + +#[cfg(test)] +mod tests { +    #[test] +    fn send_media_key_event() { +        press_play(); +    } +} | 
