4

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

例如,按下 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('/'));

我有一种方法可以判断是否按下了修饰键,但我没有一种方法可以在给定这组修饰键的情况下映射到正确的字符。

4

1 回答 1

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显式地提供当前或需要的布局作为参数。

于 2012-11-05T22:41:31.177 回答