web-dev-qa-db-ja.com

キーボードからキーを押さずに、キーボードのキー押下イベントをトリガーします

キーボードからキーを押さずにキー押下イベントをトリガーするにはどうすればよいですか? 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 });
8
ridoy

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

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

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

11
ridoy

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)
{

}
2
Sami Franka

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

あなたはここでそれへの参照を得ることができます

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

ここにそれに関するさらなる記事があります

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

0
Murtuza Kabul