将键盘的修饰键应用于角色以获得其修改值(对于当前文化)的最佳方法是什么?
例如,按下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('/'));
我有办法判断修改键是否被按下,我没有的是一种方法,然后在给定这组修饰键的情况下映射到正确的字符。
答案 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
并明确提供当前或所需的布局作为参数。