C# 从字符到system.windows.forms.keys

C# 从字符到system.windows.forms.keys,c#,.net,C#,.net,有没有办法找出要获得特定字符必须按下哪些键或键的组合。对于某些字符(如“1”、“a”)来说很容易,但对于其他字符(如“.”、“u”或“u”)来说就不那么容易了。有什么想法吗?谢谢 以下是一组“特殊角色”。这些实际上是字符实体,其中为一个字符指定了特定代码 这主要用于HTML,其中代码将提供序列,但在客户端,他们将看到字符实体 这里有一个可能与你的答案重复的答案 编辑 还有另一个重复的字符,如“.”here:多亏了您发布的链接,我找到了一个我在这里发布的解决方案。输入是一个字符,输出是System

有没有办法找出要获得特定字符必须按下哪些键或键的组合。对于某些字符(如“1”、“a”)来说很容易,但对于其他字符(如“.”、“u”或“u”)来说就不那么容易了。有什么想法吗?谢谢

以下是一组“特殊角色”。这些实际上是字符实体,其中为一个字符指定了特定代码

这主要用于HTML,其中代码将提供序列,但在客户端,他们将看到字符实体

这里有一个可能与你的答案重复的答案

编辑
还有另一个重复的字符,如“.”here:

多亏了您发布的链接,我找到了一个我在这里发布的解决方案。输入是一个字符,输出是System.Windows.Forms.Keys的列表。第一个关键点是实际关键点,列表中的其他关键点(如果有)是修改器关键点

    [DllImport("user32.dll")]
    static extern short VkKeyScan(char ch);

    public static List<Keys> FromCharacterToKeys(char c)
    {
        var key = BitConverter.GetBytes(VkKeyScan(c));
        if (key[1] > 0)
        {
            var list = new List<Keys> {(Keys) key[0]};
            list.AddRange(ConvertModifierByte(key[1]));
            return list;
        }
        else
        {
            return new List<Keys> { (Keys)key[0] }; 
        }    
    }

    private static List<Keys> ConvertModifierByte(byte modifier)
    {
        switch ((short)modifier)
        {
            case 1:
                return new List<Keys> { Keys.Shift };
            case 2:
                return new List<Keys> { Keys.Control };
            case 4:
                return new List<Keys> { Keys.Alt };
            case 6:
                return new List<Keys> { Keys.Control, Keys.Alt };
            default:
                return new List<Keys> { Keys.None };
        }
    }
[DllImport(“user32.dll”)]
静态外部短VkKeyScan(char-ch);
来自CharacterToKeys(char c)的公共静态列表
{
var key=BitConverter.GetBytes(VkKeyScan(c));
如果(键[1]>0)
{
var list=新列表{(键)键[0]};
list.AddRange(ConvertModifierByte(键[1]);
退货清单;
}
其他的
{
返回新列表{(键)键[0]};
}    
}
私有静态列表ConvertModifierByte(字节修饰符)
{
开关((短)修改器)
{
案例1:
返回新列表{Keys.Shift};
案例2:
返回新列表{Keys.Control};
案例4:
返回新列表{Keys.Alt};
案例6:
返回新列表{Keys.Control,Keys.Alt};
违约:
返回新列表{Keys.None};
}
}

这可能有助于复制到Philip:不是重复的System.Windows.Input.Key!=System.Windows.Forms.Keys,但有一个有趣的链接。Thanks@user1472131,那么你能把你的问题说清楚一点吗?我正在努力寻找你想要的。这通常是不可能的。它在很大程度上取决于活动键盘布局,一个字符可能需要多次按键。不仅仅是像Shift和Ctrl这样的修改键,还有死键,比如用来生成变音符号的那种。即使是特殊的输入,如按住Alt键和按键盘键。或者一个IME,在东亚很常见。不解释你为什么需要这个会阻止你找到更好的选择。