我如何编程生成C#按键事件?我如何编程生成C#按键事件?(How can I programmati

2019-05-08 14:56发布

How can I programmatically create an event that would simulate a key being pressed on the keyboard?

Answer 1:

问题是标签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 }
  );

还要注意的是:

  • 控制期望收到预览事件,例如PreviewKeyDown应该先的KeyDown

  • 使用target.RaiseEvent(...)直接发送事件到目标而不元的处理,例如促进剂,文本成分和IME。 这通常是你想要的。 在另一方面,如果你真的做模拟出于某种原因实际键盘上的按键,你可以使用InputManager.ProcessInput()代替。



Answer 2:

为了生产关键事件,而Windows窗体背景下,我们可以使用下面的方法,

[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);

示例代码下面给出:

const int VK_UP = 0x26; //up key
const int VK_DOWN = 0x28;  //down key
const int VK_LEFT = 0x25;
const int VK_RIGHT = 0x27;
const uint KEYEVENTF_KEYUP = 0x0002;
const uint KEYEVENTF_EXTENDEDKEY = 0x0001;
int press()
{
    //Press the key
    keybd_event((byte)VK_UP, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
    return 0;
}

虚拟按键的名单被定义在这里 。

为了获得完整的信息,请使用以下链接, http://tksinghal.blogspot.in/2011/04/how-to-press-and-hold-keyboard-key.html



Answer 3:

我没有用它,但的SendKeys可以做你想做的。

使用的SendKeys发送击键和击键组合活动应用程序。 这个类不能被实例化。 要发送键击到一个类,并立即继续你的程序的流程,使用发送。 为了等待键击启动的任何进程,使用SendWait。

System.Windows.Forms.SendKeys.Send("A");
System.Windows.Forms.SendKeys.Send("{ENTER}");

微软有一些使用的例子在这里 。



Answer 4:

容易! (因为别人已经做的工作​​,为我们...)

花了很多时间试图与这个建议的答复后,我遇到了这个CodePlex项目的Windows输入模拟器这使得它简单,可以模拟按键:

  1. 安装包,可以做或从NuGet包管理器或包管理器控制台,如:

    安装,包装InputSimulator

  2. 使用此两行代码:

    inputSimulator = new InputSimulator() inputSimulator.Keyboard.KeyDown(VirtualKeyCode.RETURN)

就是这样!



Answer 5:

的Windows SendMessage函数API与发送WM_KEYDOWN 。



文章来源: How can I programmatically generate keypress events in C#?