private List <INPUT> BuildModifiersInput(Modifiers Modifiers, bool Up, int ExtraInfo)
        {
            var keys = new List <Keys>();

            if (Modifiers.CtrlPressed())
            {
                keys.Add(Keys.ControlKey);
            }
            if (Modifiers.AltPressed())
            {
                keys.Add(Keys.Menu);
            }
            if (Modifiers.ShiftPressed())
            {
                keys.Add(Keys.ShiftKey);
            }

            return(keys.Select(key =>
            {
                var input = new INPUT();
                input.Type = InputType.KEYBOARD;
                input.Union.ki.dwFlags = Up ? KeyEventFlags.KEYUP : KeyEventFlags.NONE;
                input.Union.ki.wVk = (short)key;
                input.Union.ki.wScan = 0;
                input.Union.ki.time = 0;
                input.Union.ki.dwExtraInfo = new IntPtr(ExtraInfo);

                return input;
            }).ToList());
        }
        public override void SendKey(Keys Key, Modifiers Modifiers = Modifiers.None, bool Up = false, int ExtraInfo = 0)
        {
            var keys = new List <Keys>();

            if (Modifiers.CtrlPressed())
            {
                keys.Add(Keys.ControlKey);
            }
            if (Modifiers.AltPressed())
            {
                keys.Add(Keys.Menu);
            }
            if (Modifiers.ShiftPressed())
            {
                keys.Add(Keys.ShiftKey);
            }
            if (Key != Keys.None)
            {
                keys.Add(Key);
            }

            if (Up)
            {
                keys.Reverse();
            }

            foreach (var key in keys)
            {
                SendKeyToWindow(Window.Handle, Key, Up, Recursive);
            }
        }