ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Javaで(Win32API呼出で)Windowを操作しろ、ゲイツロボ!

2007-09-16 20:50:14 | PG(Java)

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()はいつもこれにハマる(泣)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

javadocの文字化け

2007-09-16 16:12:59 | PG(Java)

javadocを生成していたら、ブラウザー(IE)で表示したときに文字化けするページが出来てしまった。単純にmetaタグのcharset指定とかが無いから、よくある誤解をされただけなのだが。

というわけで、Antのjavadocでcharsetを指定する方法を追加。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

排他解除のタイミング

2007-09-16 02:05:19 | PG(RDBMS)

RDBで2つのトランザクションが同一データを更新しようとすると片方がロックされることは知っていたが、同じキーのデータをINSERTしようとした場合にどうなるのか?
つまり、後トランザクションのSQL実行時点でduplicateするのか、後トランザクションがコミットされる時にduplicateするのか、そもそも排他されるのか、気になった。

試してみた結果、ちゃんと排他されるし、エラーの発生もSQL実行時点であることが分かった。

よく考えてみれば、(SQL実行時点で問題無くて)コミット時点で重複が分かるってことは、他トランザクションへのロックがかかってない(他トランザクションで更新しちゃってる)ってことじゃん。
ロックがかかっている以上、コミット時点で他者が更新してることは無いはずだから、SQL実行時点しかエラーは出ないはずだなぁ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする