该问题标记为 WPF,但到目前为止的答案是特定的 WinForms 和 Win32。
要在 WPF 中执行此操作,只需构造一个 KeyEventArgs 并在目标上调用 RaiseEvent 即可。例如,要将 Insert 键 KeyDown 事件发送到当前焦点元素:
var key = Key.Insert; // Key to send
var target = Keyboard.FocusedElement; // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(
new KeyEventArgs(
Keyboard.PrimaryDevice,
PresentationSource.FromVisual(target),
0,
key)
{ RoutedEvent=routedEvent }
);
该解决方案不依赖于本机调用或 Windows 内部结构,并且应该比其他解决方案更可靠。它还允许您模拟特定元素上的按键。
请注意,此代码仅适用于 PreviewKeyDown、KeyDown、PreviewKeyUp 和 KeyUp 事件。如果您想发送 TextInput 事件,您可以这样做:
var text = "Hello";
var target = Keyboard.FocusedElement;
var routedEvent = TextCompositionManager.TextInputEvent;
target.RaiseEvent(
new TextCompositionEventArgs(
InputManager.Current.PrimaryKeyboardDevice,
new TextComposition(InputManager.Current, target, text))
{ RoutedEvent = routedEvent }
);
另请注意:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)