GetKeyNameText 以大写形式返回名称

Posted

技术标签:

【中文标题】GetKeyNameText 以大写形式返回名称【英文标题】:GetKeyNameText returns name in uppercase 【发布时间】: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后切换为大写 【参考方案1】:

想通了 - 谢谢。

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

我找到的唯一参考是这里disable ctrl shift for layout

【讨论】:

以上是关于GetKeyNameText 以大写形式返回名称的主要内容,如果未能解决你的问题,请参考以下文章

按钮文本始终以大写形式显示

SqlSever基础 Upper函数 返回字符串的大写形式

以大写形式快速显示 AM/PM

PayPal 快速结帐在 MVC .net 中以 html 形式返回响应

在 UITextView 中以大写形式显示文本并从 shouldChangeTextIn 中获取新文本,以保持原始文本和输入文本的大小写

使用 hooks 时 React 组件名称必须以大写字母开头