无需按键盘键即可触发键盘按键事件
如何在不按键盘键的情况下触发按键事件? 我试过这里的解决方案,但我得到以下exception:
‘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 });
System.Windows.Forms.SendKeys.Send()
为我做了诀窍。
有关高级说明和可用代码列表,请参阅该方法的文档 。
例如,要发送Shift + A,我使用了SendKeys.Send("+(a)")
。
你需要转换为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) { }
模拟键盘事件的简单可靠方法是使用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