GetKeyNameText以大写形式返回名称

时间:2018-07-09 19:04:10

标签: c# wpf winapi keyboard-shortcuts hotkeys

我有一个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(); ;
}

1 个答案:

答案 0 :(得分:2)

弄清楚了-谢谢。

我加载了不同的键盘布局(ENG-US和ENG-INT),并且我注意到Ctrl + Shift切换了我正在使用的布局-ENG-INT的键名大写。

我在此找到的唯一参考文献是disable ctrl shift for layout