无需按键盘上的键即可触发键盘按键事件

时间:2013-03-22 16:05:47

标签: c# wpf keyboard-events

如何在不按键盘键的情况下触发按键事件?我尝试使用here的解决方案,但我得到以下异常:

  

最佳重载方法匹配   'System.Windows.PresentationSource.FromVisual(System.Windows.Media.Visual)'   有一些无效的论点。

考虑 Shift + A 包含来自键盘的2键按键事件,如何在不按键盘的情况下执行此操作?(让我们只需在按钮点击的文本框中打印大写字母A)

我的代码

var key = Key.A;                    // Key to send
var target = Keyboard.FocusedElement;    // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send

target.RaiseEvent(new System.Windows.Input.KeyEventArgs(Keyboard.PrimaryDevice, System.Windows.PresentationSource.FromVisual(target), 0, key) { RoutedEvent = routedEvent });

3 个答案:

答案 0 :(得分:11)

System.Windows.Forms.SendKeys.Send()为我做了诀窍。

有关高级说明和可用代码列表,请参阅the docs for the method

例如,要发送 Shift + A 我使用SendKeys.Send("+(a)")

答案 1 :(得分:2)

你需要施展到Visual

var key = Key.A;                    // Key to send
var target = Keyboard.FocusedElement;    // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send

target.RaiseEvent(new System.Windows.Input.KeyEventArgs(Keyboard.PrimaryDevice,
 System.Windows.PresentationSource.FromVisual((Visual)target), 0, key) { RoutedEvent = routedEvent });

您还可以指定目标是特定文本框,例如:

var target = textBox1;    // Target element

代码实际执行的操作是触发特定元素的keydown事件。所以有一个keydown处理程序是有道理的:

private void textBox1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{

}

答案 2 :(得分:0)

模拟键盘事件的简单可靠方法是使用keybd_event api

你可以在这里参考它

http://www.pinvoke.net/default.aspx/user32.keybd_event

此处还有其他文章

http://www.codeproject.com/Articles/7305/Keyboard-Events-Simulation-using-keybd_event-funct