量産メモ帳

忘れっぽいのでメモを残しています。浅く適当に書きます。

アプリケーション内部からキーイベントを発生させてみる。

スポンサーリンク

テストケースを実行していたら、途中でダイアログが表示されて処理がストップしてしまうテストケースがあったので、ボタンを押すイベントを発生させて処理を続行させる必要に迫られました。
色々と調べてみた結果、SWT の FAQ ページにはこう書かれてました。

The method org.eclipse.swt.widgets.Display.post(Event) can be used to post mouse and keyboard events into the OS, which emulates a user performing the specified action.



どうやら Display#post(Event) メソッドを使用すれば良い模様です。
以下、Tab キーを押した後、Enter キーを押す実装例。

Display display = Display.getDefault();
Event event = new Event();


event.character = 0;
event.keyCode = SWT.TAB;
event.type = SWT.KeyDown;
display.post(event);


event.type = SWT.KeyUp;
display.post(event);


event.character = 0;
event.keyCode = SWT.CR;
event.type = SWT.KeyDown;
display.post(event);


event.type = SWT.KeyUp;
display.post(event);

ちなみに上記のコードだと、表示されたダイアログがアクティブになっていない場合、他のアクティブになってる画面に対して、キーイベントを発生させてしまいます。


また VA000137 さんのページにもっと詳しい実装例が載っています。
http://hp.vector.co.jp/authors/VA000137/eclipse/browser-sendkeys.html