我有一个TextBox
,它显示各个键的键名-显示一个热键组合。例如“ Alt + Ctrl + T”。
我有以下方法,该方法是在PreviewKeyDown
上从TextBox
调用的。
返回的字符串是密钥的正确名称。问题是,当我按Ctrl + Shift时,似乎切换了GetKeyNameText
返回的字符串的大小写(有趣的是,我尝试在其他第三方应用上输入Ctrl + Shift键,这些键可让您定义热键,并且它们具有相同的功能问题。
public string KeyToString(Key key)
{
StringBuilder sbString = new StringBuilder(256);
uint virtualKeyCode = (uint)KeyInterop.VirtualKeyFromKey(key);
// Gets the layout of keyboard
IntPtr keyboardLayout = GetKeyboardLayout(0);
// Map the virtual keycode
uint scanCode = MapVirtualKeyEx(virtualKeyCode, 0, keyboardLayout);
// Get Text
GetKeyNameText(scanCode << 16 | (1 << 25), sbString, sbString.Capacity);
return sbString.ToString(); ;
}
答案 0 :(得分:2)
弄清楚了-谢谢。
我加载了不同的键盘布局(ENG-US和ENG-INT),并且我注意到Ctrl + Shift
切换了我正在使用的布局-ENG-INT的键名大写。
我在此找到的唯一参考文献是disable ctrl shift for layout