WPF 将密钥发送到文本框
WPF send key to textBox
我正在使用虚拟键盘,但我很难发送按键。什么都没有发生,除非我将它们硬添加到文本框。这是我的代码
public static void Send(Key key)
{ //Found online
var e = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, key)
{
RoutedEvent = Keyboard.KeyDownEvent
};
InputManager.Current.ProcessInput(e);
}
private void ClickOnKey(object sender, RoutedEventArgs e)
{
CustomButton cb = sender as CustomButton;
string text = cb.text;
Console.WriteLine(text);
element_to_focus.Focus(); //The textbox
Send(translate_string_to_key(text));
}
ProcessInput
似乎只会引发相应的键相关事件,但不会真正修改文本。
如果你真的想模拟按键,你需要利用 p/invoke 并使用 SendInput
。幸运的是,有人已经为我们完成了 p/invoke 的工作,并提供了他们的工作:
https://archive.codeplex.com/?p=inputsimulator
它也可以作为 NuGet 包使用(我找到了两个版本):
https://www.nuget.org/packages/InputSimulator/
https://www.nuget.org/packages/InputSimulatorPlus/
我正在使用虚拟键盘,但我很难发送按键。什么都没有发生,除非我将它们硬添加到文本框。这是我的代码
public static void Send(Key key)
{ //Found online
var e = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, key)
{
RoutedEvent = Keyboard.KeyDownEvent
};
InputManager.Current.ProcessInput(e);
}
private void ClickOnKey(object sender, RoutedEventArgs e)
{
CustomButton cb = sender as CustomButton;
string text = cb.text;
Console.WriteLine(text);
element_to_focus.Focus(); //The textbox
Send(translate_string_to_key(text));
}
ProcessInput
似乎只会引发相应的键相关事件,但不会真正修改文本。
如果你真的想模拟按键,你需要利用 p/invoke 并使用 SendInput
。幸运的是,有人已经为我们完成了 p/invoke 的工作,并提供了他们的工作:
https://archive.codeplex.com/?p=inputsimulator
它也可以作为 NuGet 包使用(我找到了两个版本):
https://www.nuget.org/packages/InputSimulator/
https://www.nuget.org/packages/InputSimulatorPlus/