我在Visual Studio 2017中有一个UWP应用程序。我正在尝试制作一个多语言的屏幕键盘。
目前英语击键工作正常,但是来自其他语言的任何来信都会引发System.ArgumentException: 'Value does not fall within the expected range.'
以下是发送击键的代码:
public void SendKey(ushort keyCode)
{
List<InjectedInputKeyboardInfo> inputs = new List<InjectedInputKeyboardInfo>();
InjectedInputKeyboardInfo myinput = new InjectedInputKeyboardInfo();
myinput.VirtualKey = keyCode;
inputs.Add(myinput);
var injector = InputInjector.TryCreate();
WebViewDemo.Focus(FocusState.Keyboard);
injector.InjectKeyboardInput(inputs); // exception throws here
}
我如何从其他语言中注入信件?
答案 0 :(得分:2)
诀窍是InputInjector
没有注入文本(字符),但实际上它是在键盘上注入击键。这意味着输入不是VirtualKey
值包含的名称值,而是用户当前正在使用的键盘上代表的键。
例如,在捷克语中,我们使用顶部数字行来写“ě”,“š”等字符。因此,当您按键盘上的数字3时,捷克语键盘会写“š”。
如果我将代码用于Number3
值:
SendKey( (ushort)VirtualKey.Number3 );
我得到“š”作为输出。同样的事情也适用于日语,例如VirtualKey.A
实际上将映射到“あ”。
这使键盘的InputInjector
使用起来有点不方便,因为你无法预测用户实际使用的是哪种语言正在使用哪种键盘键映射,但是在反射之后它是有意义的,它是以这种方式实现的,因为它不是注入文本,而是模拟实际的键盘击键。
答案 1 :(得分:2)
Martin Zikmund给出的答案不正确。您可以发送任何unicode字符。
InputInjector inputInjector = InputInjector.TryCreate();
var key = new InjectedInputKeyboardInfo();
key.ScanCode = (ushort)'Ä';
key.KeyOptions = InjectedInputKeyOptions.Unicode;
inputInjector.InjectKeyboardInput(new[] { key });
InjectKeyboardInput
方法在幕后使用this function。请注意,您需要在应用中使用inputInjectionBrokered
功能。