相关疑难解决方法(0)

SHIFT快捷方式显示为文化"nl-BE"的MAJ,它应该是SHIFT(C#.NET)

经过与Infragistics的长时间讨论后,看来带有SHIFT的ShortCuts在我的文化"nl-BE"中显示为MAJ.首先,文化"nl-BE"和AZERTY有点奇怪.如果想了解更多,请阅读http://en.wikipedia.org/wiki/AZERTY.重要的是:

其他键是相同的,即使传统上特殊键的名称用英语打印在它们上面.这是因为比利时主要是双语(法语 - 荷兰语)和官方三种语言(第三语言,德语,在东方语言中使用).

所以MAJ印刷为SHIFT.例如,在Office中,带有SHIFT的快捷方式显示为SHIFT.在Infragistics控件中,它们显示为MAJ.这让我们的客户感到沮丧.

因此,在与Infragistics讨论后,他们声称这是一个Windows Api调用,它返回MAJ而不是SHIFT.我从他们那里得到了一个展示行为的示例项目.所以现在我的问题是为什么Windows Api调用不会返回SHIFT,如果它是正常的,那么Office如何才能正确显示它?

获取密钥文本的代码是:

NativeWindowMethods.GetKeyNameText((int)scanCode, sb, 256);
Run Code Online (Sandbox Code Playgroud)

class NativeWindowMethods
{
    #region MapVirtualKey
    [DllImport("user32.dll")]
    internal static extern int MapVirtualKey(uint uCode, uint uMapType);
    #endregion //MapVirtualKey

    #region GetKeyNameText
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    internal static extern int GetKeyNameText(
        int lParam, 
        [MarshalAs(UnmanagedType.LPWStr), Out]System.Text.StringBuilder str, 
        int size);
    #endregion //GetKeyNameText
}
Run Code Online (Sandbox Code Playgroud)

如果是Shiftkey,则扫描码为2752512(2a),并返回MAJ.

那么,我的问题是什么?

  • 对于文化"nl-BE",MAJ是否正常归还?或者它是user32.dll中的错误?
  • 如果Office能够做到正确,那么Infragistics是否也能做到正确呢?
  • Infragistics是否使用正确的user32.dll api调用?

为了完整性,我将粘贴Utilities类的完整代码.从Form下一次调用完成:

systemLocalizedString = Utilities.GetLocalizedShortcutString(shortcut);

使用快捷键= ShiftF12.调用后,systemLocalizedString等于"MAJ + F12".

更新:在Hans Passant的帮助下,我下载了Microsoft Keyboard Layout Creator并导出了我当前的键盘布局.在.klc文件中没有找到MAJ,只有Shift(例如2a Shift).那么为什么user32.dll会返回MAJ?甚至更奇怪的是,当我复制.klc文件并将其安装为新键盘时,突然user32.dll确实为新安装的键盘返回Shift(虽然它是一个精确的副本).

Utilities.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using …
Run Code Online (Sandbox Code Playgroud)

c# culture infragistics localization user32

6
推荐指数
1
解决办法
791
查看次数

标签 统计

c# ×1

culture ×1

infragistics ×1

localization ×1

user32 ×1