public static TypedKey GetTypedLetter(this KeyboardState keyboardState)
        {
            var keysDown = keyboardState.GetKeysDown();

            var typedKey = new TypedKey()
            {
                Key      = keysDown.Length > 0 ? keysDown[0] : Keys.None,
                CapsLock = keyboardState.CapsLock,
                String   = "",
            };

            if (keysDown.Length == 0)
            {
                return(typedKey);
            }

            var pressedKeys = keyboardState.GetPressedKeys();

            foreach (var pressedKey in pressedKeys)
            {
                switch (pressedKey)
                {
                case Keys.LeftShift:
                case Keys.RightShift:
                    typedKey.Shift = true;
                    break;

                case Keys.LeftControl:
                case Keys.RightControl:
                    typedKey.Ctrl = true;
                    break;

                case Keys.LeftAlt:
                case Keys.RightAlt:
                    typedKey.Alt = true;
                    break;
                }
            }

            if (typedKey.Key >= Keys.A && typedKey.Key <= Keys.Z)
            {
                typedKey.String = char.ConvertFromUtf32((int)typedKey.Key);
                if (typedKey.Shift == typedKey.CapsLock)
                {
                    typedKey.String = typedKey.String.ToLower();
                }
            }
            else if (typedKey.Key >= Keys.D0 && typedKey.Key <= Keys.D9)
            {
                typedKey.String = char.ConvertFromUtf32(((int)typedKey.Key - (int)Keys.D0) + '0');
            }
            else if (typedKey.Key >= Keys.NumPad0 && typedKey.Key <= Keys.NumPad9)
            {
                typedKey.String = char.ConvertFromUtf32(((int)typedKey.Key - (int)Keys.NumPad0) + '0');
            }
            else if (typedKey.Key == Keys.Space)
            {
                typedKey.String = " ";
            }

            return(typedKey);
        }