Esempio n. 1
0
    public static string GetSelectKeyText(ModifierKeys modifier = ModifierKeys.None)
    {
        //Get the modifers as text.
        var modifiersText = Enum.GetValues(modifier.GetType()).OfType <ModifierKeys>()
                            .Where(x => x != ModifierKeys.None && modifier.HasFlag(x))
                            .Aggregate("", (current, mod) =>
        {
            if (mod == ModifierKeys.Control)     //TODO: Custom mod.ToString();
            {
                return(current + (string.IsNullOrWhiteSpace(current) ? "" : " + ") + "Ctrl");
            }

            return(current + (string.IsNullOrWhiteSpace(current) ? "" : " + ") + mod);
        });

        return(modifiersText);
    }
Esempio n. 2
0
    public static string GetSelectKeyText(Key key, ModifierKeys modifier = ModifierKeys.None, bool isUppercase = false, bool ignoreNone = false)
    {
        //Key translation.
        switch (key)
        {
        case Key.Oem1:
            key = Key.OemSemicolon;
            break;

        case Key.Oem2:
            key = Key.OemQuestion;
            break;

        case Key.Oem3:
            key = Key.OemTilde;
            break;

        case Key.Oem4:
            key = Key.OemOpenBrackets;
            break;

        case Key.Oem5:
            key = Key.OemPipe;
            break;

        case Key.Oem6:
            key = Key.OemCloseBrackets;
            break;

        case Key.Oem7:
            key = Key.OemComma;
            break;
        }

        if (ignoreNone && key == Key.None)
        {
            return("");
        }

        //Get the modifers as text.
        var modifiersText = Enum.GetValues(modifier.GetType()).OfType <ModifierKeys>()
                            .Where(x => x != ModifierKeys.None && modifier.HasFlag(x))
                            .Aggregate("", (current, mod) =>
        {
            if (mod == ModifierKeys.Control)     //TODO: Custom mod.ToString();
            {
                return(current + "Ctrl" + " + ");
            }

            return(current + mod + " + ");
        });

        var result = GetCharFromKey(key);

        if (result == null || string.IsNullOrWhiteSpace(result.ToString()) || result < 32)
        {
            //Some keys need to be displayed differently.
            var keyText = key.ToString();

            switch (key)
            {
            case Key.LeftCtrl:
            case Key.RightCtrl:
                keyText = "Ctrl";
                break;

            case Key.LeftShift:
            case Key.RightShift:
                keyText = "Shift";
                break;

            case Key.LeftAlt:
            case Key.RightAlt:
                keyText = "Alt";
                break;

            case Key.CapsLock:
                keyText = "CapsLock";
                break;

            case Key.LWin:
            case Key.RWin:
                keyText = "Windows";
                break;

            case Key.Return:
                keyText = "Enter";
                break;

            case Key.Next:
                keyText = "PageDown";
                break;

            case Key.PrintScreen:
                keyText = "PrintScreen";
                break;

            case Key.Back:
                keyText = "Backspace";
                break;

            //Special localization
            case Key.Space:
                keyText = LocalizationHelper.Get("S.Keys.Space");
                break;
            }

            //Modifiers;
            return(modifiersText + keyText);

            #region Try it later

            /*
             *  Declare Function ToAscii Lib "user32" (ByVal uVirtKey As Integer, ByVal uScanCode As Integer, ByRef lpbKeyState As Byte, ByRef lpwTransKey As Integer, ByVal fuState As Integer) As Integer
             *  Declare Function GetKeyboardState Lib "user32.dll" (ByRef pbKeyState As Byte) As Long
             *
             *  Private Function GetCharFromKey(ByVal KeyCode As Integer) As String
             *      Dim KeyBoardState(255) As Byte
             *      Dim Out As Long
             *
             *      If GetKeyboardState(KeyBoardState(0)) <0 Then
             *          If ToAscii(KeyCode, 0, KeyBoardState(0), Out, 0) <0 Then
             *              If Out <= 255 Then
             *                  GetCharFromKey = Chr(Out)
             *              Else
             *                  'GetCharFromKey = Microsoft.VisualBasic.Left(StrConv(ChrW(Out), vbUnicode), 1)
             *                  GetCharFromKey = Microsoft.VisualBasic.Left(StrConv(ChrW(Out), VbStrConv.None), 1)
             *              End If
             *          Else
             *              GetCharFromKey = ""
             *          End If
             *      Else
             *          GetCharFromKey = ""
             *      End If
             *  End Function
             *
             */

            #endregion
        }

        //If there's any modifiers, it means that it's a command. So it should be treated as uppercase.
        if (modifiersText.Length > 0)
        {
            isUppercase = true;
        }

        return(modifiersText + (isUppercase ? char.ToUpper(result.Value) : result));
    }