う~む なんとか望みの処理は出来ましたが、
本格的に作るならC系言語を覚えたほうが早いのかもしれません。
具体的にはC#なんでしょうか。
とりあえず、準備が必要なので1こずつ。
ライブラリのダウンロード
jna.jaとjna-platform.jarが必要です。
ここからダウンロードして解凍した中に入ってます。
ライブラリに追加
Netbeansでの方法です。もっとやりやすい方法があるのかも?
プロジェクト右クリック>ライブラリ>JAR/フォルダの追加
ソースコード
なんで動いてるのかびっくりするくらいわかってません!
User32とかkaernel32とかおなじみのくくりを呼び出して、
メソッドの引数、戻り値の型を合わせておけばいいっぽいです。
import com.sun.jna.Native; import com.sun.jna.win32.StdCallLibrary; public class Windows { public static interface User32 extends StdCallLibrary { final User32 instance = (User32) Native.loadLibrary ("user32", User32.class); short GetAsyncKeyState(int key); } public static void main(String[] args) { while(User32.instance.GetAsyncKeyState(101) == 0){ } System.out.println("テンキーの5が押されました"); } }
よくわからんのだけど、インターフェースのくせにインスタンスをもってて、
Newしなくていいようになってる???
素直に継承してメソッドにしておけばいいのかな……
なにはともあれ、これを実行しておいてテンキーの5押すと
無限ループが止まってprintが表示されます。
User32.instance.GetAsyncKeyState(101) これの101は
Keycodeとはまた別です。いろんなとこで紹介されてます。
<Excel, VBA> キー操作をシュミレート - ねこゆきのメモ
参考にさせていただきました!
引数かえればいろんなキーで応用可能です。
ただし、なんらかのキーが押されたのを感知してそれが何か調べる
のは出来ません。 GetKeyboardStateでいけそうなんですが、難しくて挫折。
配列を与えて格納してもらうので、こっちで配列ループにしても
結局変わらないんじゃとおもったり。
Windows API使うたぐいはこれでなんとか応用可能っぽいです。
キーイベントを発生させるのはRobotクラスなるものがあるらしいので
そっちのがよさげです。