JavaにはRobotというクラスがある。名前だけ聞くとロボット(キクゾーやらホンダのアシモやら)を操作するクラスに思えるが、(少なくとも現在は)そうではない。
JavaのRobotは、ウィンドウを自動的に操作する(キーを押したりマウスをクリックしたり)するもの。そういうのを自動的に行うから“ロボット”。まぁロボットという言葉を作り出したアイザック=アシモフは、そういうのは想定してなかったと思うけど…。
んで、このクラスを使うとサーブレットを使った画面の自動遷移を行ったりすることが出来て、ちょっと面白い。画面を介した単純な大量データ登録なんかも上手くすれば出来る。
が、特定のWindowを指定したりサーバーから応答が返って画面描画が完了するまで待ったりできないのが難点。そこで、Win32APIをJNIで呼び出してやろうと考えた。
でもその前に、Win32APIのJNI呼び出しなんて誰でもやってそうだから、ライブラリが無いかなーと思ってちょっと探してみた。
やはり案の定、MicrosoftのJ/Direct(SunのVMでなくMicrosoftVMを使う必要があるようなので却下)やらJ/Invoke(UNIXにも対応しているようだが3万円もするので却下)やら、やっぱり色々あるみたい。だけど極めつけはEclipseのSWT!こんな身近にあるなんて驚き。これなら既に入ってるから、簡単に使える。
でもやりたい事にはちょっと足りなかったので、その分だけ自作。
MS-Windowsのウィンドウを操作するクラスなので、Javaでの“ロボット”になぞらえて「ビルゲイツロボット」とでも命名しようかと思った(ビルゲイツにウィンドウ操作を命じるw)けど、そこは自重してWindowsRobotという名前にしてみた。
本当はマウス移動やボタン押下も全部Win32API呼び出しにしたいと思ったんだけど、上手くいかないので断念。どうも狙ったHWNDが取れていないっぽい。PostMessage()はいつもこれにハマる(泣)