【发布时间】:2018-12-17 13:03:36
【问题描述】:
我有一个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(); ;
}
【问题讨论】:
-
什么是
Key?这是PreviewKeyDown事件中PreviewKeyDownEventArgs的属性之一吗? -
是的,一切正常,只是从
GetKeyNameText返回的文本可以在按下Ctrl + Shift后切换为大写
标签: c# wpf winapi keyboard-shortcuts hotkeys