如何在C#中以编程方式生成按键事件?

如何以编程方式创建一个事件,该事件将模拟键盘上的按键?

回答:

该问题被标记为WPF,但到目前为止的答案是特定的WinForms和Win32。

要在WPF中执行此操作,只需构造一个KeyEventArgs并在目标上调用RaiseEvent。例如,要将Insert key

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 }

);

另请注意:

  • 控件希望接收预览事件,例如PreviewKeyDown应该在KeyDown之前

  • 使用target.RaiseEvent(…)将事件直接发送到目标,而无需诸如加速器,文本合成和IME之类的元处理。这通常是您想要的。另一方面,如果出于某种原因确实执行了模拟实际键盘按键的操作,则应改用InputManager.ProcessInput()。

以上是 如何在C#中以编程方式生成按键事件? 的全部内容, 来源链接: utcz.com/qa/399670.html

回到顶部