private void PopulateActionTextBox() { string fullstring = string.Empty; foreach (var key in _actionKeys) { if (_isOsx) { VirtualKeyCodeOSX kvc = (VirtualKeyCodeOSX)key; fullstring = fullstring + kvc.ToString() + "+"; } else { VirtualKeyCodeWIN kvc = (VirtualKeyCodeWIN)key; fullstring = fullstring + kvc.ToString() + "+"; } } if (fullstring.Length > 1 && fullstring[fullstring.Length - 1] == '+') { fullstring = fullstring.Remove(fullstring.Length - 1); } ActionTbox.Text = fullstring; }
public unsafe static void SendKey(List <int> commands) { IntPtr eventSource = CGEventSourceCreate(CGEventSourceStateID.kCGEventSourceStateHIDSystemState); int keyMask = 0; List <VirtualKeyCodeOSX> nonModifierKeys = new List <VirtualKeyCodeOSX>(); foreach (var cmd in commands) { VirtualKeyCodeOSX newCmd = (VirtualKeyCodeOSX)cmd; if (newCmd == VirtualKeyCodeOSX.LCONTROL || newCmd == VirtualKeyCodeOSX.RCONTROL) { keyMask |= (int)CGEventFlags.kCGEventFlagMaskControl; } else if (newCmd == VirtualKeyCodeOSX.RCMD || newCmd == VirtualKeyCodeOSX.LCMD) { keyMask |= (int)CGEventFlags.kCGEventFlagMaskCommand; } else if (newCmd == VirtualKeyCodeOSX.RSHIFT || newCmd == VirtualKeyCodeOSX.LSHIFT) { keyMask |= (int)CGEventFlags.kCGEventFlagMaskShift; } else if (newCmd == VirtualKeyCodeOSX.RALT || newCmd == VirtualKeyCodeOSX.LALT) { keyMask |= (int)CGEventFlags.kCGEventFlagMaskAlternate; } else { nonModifierKeys.Add(newCmd); } } if (keyMask != 0 && nonModifierKeys.Count > 0) { var keyEventDown = CGEventCreateKeyboardEvent(eventSource, (ushort)nonModifierKeys[0], true); CGEventSetFlags(keyEventDown, keyMask); CGEventPost(CGEventTapLocation.kCGHIDEventTap, keyEventDown); CFRelease(keyEventDown); } else if (keyMask == 0 && nonModifierKeys.Count > 0) { foreach (var cmd in nonModifierKeys) { var keyEventDown = CGEventCreateKeyboardEvent(eventSource, (ushort)cmd, true); var keyEventUp = CGEventCreateKeyboardEvent(eventSource, (ushort)cmd, false); CGEventPost(CGEventTapLocation.kCGHIDEventTap, keyEventDown); CGEventPost(CGEventTapLocation.kCGHIDEventTap, keyEventUp); CFRelease(keyEventDown); CFRelease(keyEventUp); } } }