예제 #1
0
        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;
        }
예제 #2
0
        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);
                }
            }
        }