将修饰键应用于字符

时间:2012-05-31 01:23:55

标签: c# .net-4.0

将键盘的修饰键应用于角色以获得其修改值(对于当前文化)的最佳方法是什么?

例如,按下shift(对于英国键盘):

Assert.AreEqual('!', Modify('1'));
Assert.AreEqual('"', Modify('2'));
Assert.AreEqual('A', Modify('a'));
Assert.AreEqual('B', Modify('b'));
Assert.AreEqual(':', Modify(';'));
Assert.AreEqual('?', Modify('/'));

我有办法判断修改键是否被按下,我没有的是一种方法,然后在给定这组修饰键的情况下映射到正确的字符。

1 个答案:

答案 0 :(得分:0)

根据您要完成的操作,可能会执行以下操作:

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

    [Test]
    public void Test_VkKeyScan()
    {
        Assert.AreEqual(VkKey('!'), VkKey('1'));
        Assert.AreEqual(VkKey('@'), VkKey('2'));
    }

    private short VkKey(char p)
    {
        return (short)(0xff & VkKeyScan(p));
    }

使用提供的VkKey方法构建字典也不应该是一个问题。

更新:正确处理多个布局需要使用VkKeyScanEx而不是VkKeyScan并明确提供当前或所需的布局作为参数。