8

キーボードからキーを押さずにキープレスイベントをトリガーするにはどうすればよいですか? hereのソリューションを試してみましたが、次の例外が発生しました。

'System.Windows.PresentationSource.FromVisual(System.Windows.Media.Visual)' に最も一致するオーバーロードされたメソッドには、無効な引数が含まれています。

キーボードからの2つのキープレスイベントが含まれていると考えてくださいShift+A。キーボードを押さずにそれを行うにはどうすればよいですか?(ボタンクリック時にテキストボックスに大文字のAを印刷してみましょう)

私のコード

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 });
4

3 に答える 3

11

System.Windows.Forms.SendKeys.Send()私のためにトリックをしました。

高度な手順と使用可能なコードのリストについては、メソッドのドキュメントを参照してください。

たとえば、送信するにはShift+ AI を使用しSendKeys.Send("+(a)")ました。

于 2013-03-22T19:13:46.653 に答える
2

にキャストする必要があります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

コードが実際に行うことは、特定の要素の keydown イベントをトリガーすることです。そのため、 keydown ハンドラーを用意することは理にかなっています:

private void textBox1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{

}
于 2013-03-22T16:54:54.503 に答える
0

キーボード イベントをシミュレートする簡単で信頼性の高い方法は、keybd_event API を使用することです。

ここから参照できます

http://www.pinvoke.net/default.aspx/user32.keybd_event

その他の記事はこちら

http://www.codeproject.com/Articles/7305/Keyboard-Events-Simulation-using-keybd_event-funct

于 2013-03-22T16:09:57.017 に答える