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

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

164737 次浏览

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

使用 SendKeys 发送击键和 活动的击键组合 应用程序。此类不能是 将按键发送到 上课,并立即继续 程序的流程,请使用 Send.To wait for any processes started by the 按键,使用发送等待。

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

Microsoft 有更多的使用示例 给你

发送 WM _ KEYDOWN的 Windows SendMessage API

这个问题被标记为 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 }
);

还要注意:

  • 控件期望接收预览 events, for example PreviewKeyDown 应该在 KeyDown 之前

  • 使用 target.RaiseEvent (...)将事件直接发送到目标 没有元处理,比如 加速器,文本组成和 这通常是你想要的。 另一方面,如果你真的这么想 what to simulate actual keyboard keys 出于某种原因,你会使用 而不是 InputManager.ProcessInput ()。

To produce key events without Windows Forms Context, We can use the following method,

[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

很简单! (因为已经有人替我们做了... ...)

在花了大量的时间尝试这与建议的答案,我碰到了这个 codilx 项目 视窗输入模拟器,它使它简单到可以模拟一个关键按:

  1. 安装软件包,可以从 NuGet 软件包管理器或者从软件包管理器控制台这样做:

    安装-软件包输入模拟器

  2. 使用这两行代码:

    InputSimulator = new InputSimulator () 输入模拟器。键盘。 KeyDown (VirtualKeyCode.RETURN)

就是这样!

——编辑——

由于某种原因,codilx 上的项目页面被标记为 这个,它是 NuGet 库的链接。