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输入模拟器这使得它简单,可以模拟按键:
安装包,可以做或从NuGet包管理器或包管理器控制台,如:
安装,包装InputSimulator
使用此两行代码:
inputSimulator = new InputSimulator() inputSimulator.Keyboard.KeyDown(VirtualKeyCode.RETURN)
就是这样!
Answer 5:
的Windows SendMessage函数API与发送WM_KEYDOWN 。