如何在 WinRT 中将 VirtualKey 转换为非美国键盘布局的字符?

2024-03-26

在标准 .NET 中,存在 ToAscii/ToUnicode 和 MapVirtualKey 函数来处理此功能,但似乎尚未将等效函数或库引入 Metro/WinRT 中。如果 Metro/WinRT 中实际上没有公开的等效函数或库,那么自定义文本输入框将很难在非美国国家/地区推向市场。 具体示例:在我的自定义控件中,如果法语键盘用户按下 è、ù、é 或 à 键,它们将无法翻译为正确的字符。例如,è 使用 VirtualKey.Number7 的扫描代码,据我所知,没有办法知道键盘布局,也没有简单的方法可以根据当前键盘布局转换该扫描代码。 有人有这方面的信息吗?


我想这取决于你在寻找什么。如果您正在寻找简单的英文字母或数字,您可以简单地执行以下操作:

private static char? ToChar(VirtualKey key, bool shift)
{
    // convert virtual key to char
    if (32 == (int)key)
        return ' ';

    VirtualKey search;

    // look for simple letter
    foreach (var letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
    {
        if (Enum.TryParse<VirtualKey>(letter.ToString(), out search) && search.Equals(key))
            return (shift) ? letter : letter.ToString().ToLower()[0];
    }

    // look for simple number
    foreach (var number in "1234567890")
    {
        if (Enum.TryParse<VirtualKey>("Number" + number.ToString(), out search) && search.Equals(key))
            return number;
    }

    // not found
    return null;
}

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 WinRT 中将 VirtualKey 转换为非美国键盘布局的字符? 的相关文章

随机推荐