GetKeyNameText returns 大写名称
GetKeyNameText returns name in uppercase
我有一个 TextBox
显示单个键的键名 - 以显示热键组合。例如 "Alt + Ctrl + T".
我有以下方法,它是在 TextBox
上从 PreviewKeyDown
调用的。
返回的字符串是密钥的正确名称。问题是当我按下 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(); ;
}
弄明白了 - 谢谢。
我加载了不同的键盘布局(ENG-US 和 ENG-INT),我注意到 Ctrl + Shift
切换我正在使用的布局 - ENG-INT 的按键名称为大写。
我找到的唯一参考是这里 disable ctrl shift for layout
我有一个 TextBox
显示单个键的键名 - 以显示热键组合。例如 "Alt + Ctrl + T".
我有以下方法,它是在 TextBox
上从 PreviewKeyDown
调用的。
返回的字符串是密钥的正确名称。问题是当我按下 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(); ;
}
弄明白了 - 谢谢。
我加载了不同的键盘布局(ENG-US 和 ENG-INT),我注意到 Ctrl + Shift
切换我正在使用的布局 - ENG-INT 的按键名称为大写。
我找到的唯一参考是这里 disable ctrl shift for layout