なんて言うと大袈裟だが、「マクロ言語の開発」となると、かなりハードルが下がるように感じないだろうか。
ウィキペディアによると、
「マクロ言語は、アプリケーションソフトウェアの機能を直接キーボードやマウスなどから利用するのではなく、プログラムから利用するためのプログラミング言語である。」
と、定義されている。
要約すると、
「マクロ言語は、プログラミング言語である。」
ということになる。
そこで、Javaの標準ライブラリの中から
「java.awt.Robot」
にスポットを当てた言語開発にチャレンジしてみる。
このクラスは、OS上でマウス及びキーボードイベントを発生させることができるという特徴がある。
Robotを利用すれば、システムを自動でテストできる(かもしれない)。
実行環境セットを以下に格納している。
※実行中は、くれぐれもマウスやキーボードに触らないように。
<<<Google Group>>>
http://groups.google.co.jp/group/yk-inventory?hl=ja
<<開発のポイント>>
1.プログラミング言語の開発には、字句解析・構文解析が必要となる。
字句解析とは、関数・変数・定数などを解釈することで、
構文解析とは、字句の位置や順序を解釈することである。
2.プログラマでなくても簡単にプログラムを書けなくてはならない。
元々のJavaよりも、難解なのでは開発する意味がなくなってしまう。
今回は、一定の単純な規則になるような構造にした。
分岐や繰り返しすらない。
3.問題が発生しそうな機能は、ユーザに解放しない。
Robot利用時に問題となるのが、アプリ終了後のイベントの解放であるが、
マウスをプレスするとリリースが必要となるのである。
誤って、リリース処理が洩れると対象のアプリが異常な挙動を示す場合がある。
対処として、プレス機能は解放せずに、代わりにクリック機能と
ドラッグ&ドロップ機能を作成して、それをユーザに提供することとした。
<<処理概要>>
Executable Jarに解析プログラムを格納して、JavaRuntime環境配下での起動を可能とする。
Jarはダブルクリックで起動して、同階層のディレクトリから「robot.txt」というファイルを読み込む。
そのファイルの一行目には、ユーザが作成したマクロのファイルパスを記載する。
次に、ファイルパスを元にマクロを開き、解析をしながら、マクロに記述された処理を進めていく。
<<関数一覧>>
comm [comment] ← コマンド内でのコメント
skey [key] ← keyの単独押下
wkey [key1] [key2] ← keyの二重押下
lkey [string] ← 文字列入力(全角モードで、自動でひらがなに確定する。)
kkey [string] ← 文字列入力(全角モードで、自動でひらがなに確定しない。)
mclk [button] ← マウスのクリック(LEFT または RIGHT)
mmov [x] [y] ← マウスの移動
drdr [x1] [y1] [x2] [y2] ← マウスの移動
wait [time] ← 待機(アプリ起動時は、起動中の待機時間が必要)