将VirtualKey映射到UWP应用程序中的char,与布局无关

Cod*_*ous 6 c# keyboard input uwp

我正在使用C#为HoloLens编写VNC客户端,我很难搞清楚如何处理键盘输入.KeyUp/KeyDown给了我一个Windows.System.VirtualKey对象,但似乎没有一个API将这些VirtualKeys(以及修饰符,例如shift)映射到它们在给定布局上表示的字符.例如,当它只是VirtualKey.F时,VirtualKey.Shift + VirtualKey.F =='F'与'f'.或Shift + 5在美国键盘上给出%.

在win32应用程序中,您将使用MapVirtualKey为您处理键盘布局 - 如何在UWP中处理?

Elv*_*SFT 8

无法在KeyUp/KeyDown事件中获取已翻译的字符.但是,使用CoreWindow.CharacterReceived事件获取翻译后的字符是可能的.

您可以通过以下代码注册活动:

Window.Current.CoreWindow.CharacterReceived += CoreWindow_CharacterReceived;
Run Code Online (Sandbox Code Playgroud)

并且您将通过CharacterReceivedEventArgs获得已翻译输入字符的KeyCode(例如,对于shift+5它获取37,而对于5它获取53):

private void CoreWindow_CharacterReceived(CoreWindow sender, CharacterReceivedEventArgs args)
{
    uint keyCode=args.KeyCode;
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,这种方法的缺点是你不可能得到任何非字符键,并且在KeyDown/KeyUp中没有办法告诉什么是普通字符而不是普通字符.几乎完全射击整个事情.我最终创建了自己的布局映射器来处理这个问题. (2认同)