キーボードからキーを押さずにキー押下イベントをトリガーするにはどうすればよいですか? here のソリューションを試してみましたが、次の例外が発生しました。
'System.Windows.PresentationSource.FromVisual(System.Windows.Media.Visual)'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります。
検討する Shift+A キーボードからの2つのキー押下イベントが含まれていますが、キーボードを押さずにそれを行うにはどうすればよいですか?
私のコード
var key = Key.A; // Key to send
var target = Keyboard.FocusedElement; // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(new System.Windows.Input.KeyEventArgs(Keyboard.PrimaryDevice, System.Windows.PresentationSource.FromVisual(target), 0, key) { RoutedEvent = routedEvent });
System.Windows.Forms.SendKeys.Send()
は私のためにトリックをしました。
高度な手順と使用可能なコードのリストについては、 メソッドのドキュメント を参照してください。
たとえば、送信するには Shift+ASendKeys.Send("+(a)")
を使用しました。
Visual
にキャストする必要があります:
var key = Key.A; // Key to send
var target = Keyboard.FocusedElement; // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(new System.Windows.Input.KeyEventArgs(Keyboard.PrimaryDevice,
System.Windows.PresentationSource.FromVisual((Visual)target), 0, key) { RoutedEvent = routedEvent });
たとえば、ターゲットが特定のテキストボックスであることを指定することもできます。
var target = textBox1; // Target element
コードが実際に行うことは、特定の要素のキーダウンイベントをトリガーすることです。したがって、キーダウンハンドラーを用意するのは理にかなっています。
private void textBox1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
}
キーボードイベントをシミュレートする簡単で信頼性の高い方法は、keybd_eventapiを使用することです。
あなたはここでそれへの参照を得ることができます
http://www.pinvoke.net/default.aspx/user32.keybd_event
ここにそれに関するさらなる記事があります
http://www.codeproject.com/Articles/7305/Keyboard-Events-Simulation-using-keybd_event-funct