KMmacro というフリーソフトをご存じでしょうか?
http://www.geocities.jp/trick_room/kmmacro.html
http://www.vector.co.jp/soft/win95/util/se211440.html
たわしとさんが公開してくださっている「キーボード・マクロ&マウス・マクロ」です。
http://www.geocities.jp/trick_room/
KMmacro は、一言で言えば「マクロツール」なのですが、条件分岐とか使えるので
いろいろ遊べるツールだったりします。特に、指定座標ピクセルの色 (RGB) の取得が
できるところがすばらしい(理由は別途)。
しばらく前に、とあるソフトの自動操作プログラムを作ったときに
だいぶ使い込んだのですが(そのプログラムはお蔵入りしました)、
最近、Web ページの Evernote 取り込みの自動化をしたくなって、
再びお世話になってます。
最新版のリリースが 2006年なのですが、Windows 7 64bit でも問題なく動きます。
Virtual PC 上での Windows XP でもまったく問題なし。
すばらしいです!
で、せっかくなので、ちょっとしたノウハウを記事にしておこうかと思います。
ちなみに、添付のドキュメント (KMmacro.txt) を読んでいることが前提です。
■ ログファイルをリアルタイムに吐く
KMmacro にはテキストファイルを読み書きする機能が備わっています。
たとえば、長いマクロを書くときに、途中途中でログを吐かせると
デバッグの役に立ちます。いわゆる printf デバッグですね。
単純にテキストファイルに書き込むなら write 文を使えば OK です。
open "log_kmmacro.txt" append 1
:
:
write 1 (& (date "yyyy/mm/dd hh:nn:ss") " " "hogehoge")
:
:
close 1
open して write して close する、という基本パターンですね。
# ちなみに、write 文は自動的に最後に改行をしてくれます。
# あと、write の引数の間にカンマは不要です(KMmacro.txt の誤記)。
マクロの冒頭で open しておけば、あとはログを吐きたいところで
write 文を呼び出すだけです。カンタン。
ただし、これだとバッファをフラッシュしてくれないので、
いわゆる「リアルタイム」なログにはなりません。
何行か出力したところでまとめて数行分がログに書き込まれます。
fflush みたいなコマンドは(今のところ)ありません。
もちろん、マクロが終了した時点で自動的に close してくれるので
ログとして破綻しているわけではありません。
しかしながら、仮想マシン上で KMmacro を実行して、
その状況だけ "tail -f" でモニタしたい、みたいな
ニッチな需要が個人的にあったりします。
答えは単純で、毎回 close してあげればいいだけです。
あまり美しくないですが、とりあえず動きます。
まず、マクロのどこかで次のような関数を定義しておきます。
:MyLog1
open "log_kmmacro.txt" append 1
write 1 (& (date "yyyy/mm/dd hh:nn:ss") " " %myLog1Message)
close 1
return
さらに、マクロの冒頭で次のように変数宣言しておきます。
dim %myLog1Message
あとは、ログを吐きたいところで、write 文の代わりに以下を実行します。
set %myLog1Message "hogehoge"
call :MyLog1
これだけで、ログに1行吐き出すごとにバッファがフラッシュされるので、
リアルタイムにログを監視することができます。
ちなみに、組み込み関数と組み合わせることも可能です。
set %myLog1Message (& "DEBUG: getwindowpos=" (getwindowpos))
call :MyLog1
以上、ご参考まで!
(つづく)