hirax.net::inside out::2008年12月01日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2008年11月 を読む << 2008年12月 を読む >> 2009年1月 を読む

2008-12-01[n年前へ]

「Windows操作を再現するPerlスクリプト」を自動で作る"Win32GuiTest.exe" 

 PerlでWindowsのGui操作を記述することができるライブラリ Win32::GuiTest を、ppmからインストールするのではなくてWin32-GuiTest-1.56.tar.gzとしてダウンロードしてみると、"Win32-GuiTest Recorder"というwindows アプリケーションが付属していることに気づきました。

 "Win32-GuiTest Recorder"が行う動作を「ひとこと」で言ってしまえば、「マウスイベントとキーボードイベントをフックし、得られたマウス操作やキーボード操作をPerlのソースコードとして保存してくれる」というものです。たとえば、「( "Win32-GuiTest Recorder" の)"Record"ボタンを押し、適当にキーボードとマウス作業をしてから、"Stop"ボタンを押す」と、こういったPerlソースコードが自動作成されます。

#!/usr/bin/perl
use Win32::GuiTest qw/:ALL/;
$Win32::GuiTest::debug = 0;

MouseMoveAbsPix(303, 484);
SendMouse('{LEFTCLICK}');
SendKeys('{ENT}test{ENT}');
SendRawKey(VK_LCONTROL, 
  KEYEVENTF_EXTENDEDKEY);
SendKeys('s');
SendRawKey(VK_LCONTROL, 
  KEYEVENTF_EXTENDEDKEY | 
  KEYEVENTF_KEYUP);
MouseMoveAbsPix(169, 484);
SendMouse('{LEFTCLICK}');
SendKeys('{BAC}{ENT}');
SendRawKey(VK_LCONTROL, 
  KEYEVENTF_EXTENDEDKEY);
SendKeys('s');
SendRawKey(VK_LCONTROL, 
  KEYEVENTF_EXTENDEDKEY | 
  KEYEVENTF_KEYUP);
 

ソースを眺めてみれば、結局、Windows操作を、MouseMoveAbsPix と SendMouse と SendKeys と SendRawKey として記録するだけになります。しかし、Windows上の操作を一回するだけで、スクリプトが自動生成されるというのは、とても便利です。しかも、マウスイベントとキーボードイベントだけを記録するだけでなくて、起動時に表示されるダイアログで"Windows Hint"オプションを付けておけば、「操作を行ったWindowの名前やクラス」を(ソースコード内にコメントとして)記録しておいてくれるのです。これは、後からfindWindowなどを使った処理に変える際に非常に便利です。Windowのクラスや名前を自動で記録しておいてもらえると、たとえば、(画面サイズが異なる他の人のPCで動くように)後でPerlスクリプトを修正したりする作業が実に簡単になります。

 単純作業をスクリプトで書く場合には、ソースコードをゼロから書き始めるよりは、叩き台・スケルトンからスタートする方が「とっつきやすい」ものです。もちろん、「とっつきやすい」コースが最終的に楽なコースかどうかは場合によりけりだと思いますが、いじり始める叩き台が自動的に作ってくれるツールというのは、とても便利なものだと思います。