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スクリプトを修正したりする作業が実に簡単になります。
単純作業をスクリプトで書く場合には、ソースコードをゼロから書き始めるよりは、叩き台・スケルトンからスタートする方が「とっつきやすい」ものです。もちろん、「とっつきやすい」コースが最終的に楽なコースかどうかは場合によりけりだと思いますが、いじり始める叩き台が自動的に作ってくれるツールというのは、とても便利なものだと思います。
2008-12-07[n年前へ]
■複数OSをシームレスに使うことができるVMware「ユニティ機能」がWindows上でも動く
Windows上で動かしている VMware にアップデートをかけると、「ユニティ(Unity)機能」を使うことができるようになっていた。Unity機能とは、仮想PC上で動かしているシステムのウィンドーをホスト側の画面にシームレスに表示する機能である。これまでも、OS X上で動くVMware Fusionや、(やはりOS X上で動く仮想PCソフトウェアである)Parallelsではこういった機能がサポートされていたが、Windowsでも「ホストPCと仮想PCのウィンドーをシームレスに使うことができる環境」ができた。
たとえば、下の画像は一見よくあるWindows画面だが、実際には(ホストOSである)Windows Vista上で動いているウィンドーとVMware上で動かしているWindows 2000が表示しているウィンドーが混在している。
わかりやすいように(下の画像のように)色分けしてみると、水色部分がWindows Vistaのウィンドーで、オレンジ色部分がWindows 2000 のウィンドーである。もちろん、下のタスクバーの中でもWindows VistaとWindows 2000が共存していることがわかる。
現状ではMicrosoft WindowsとLinux系のウィンドーシステムで動くようなので、Windows上でVMwareを使って作業するような人であれば、重宝する状況が多いに違いない。
しかし、今のところ、私の環境では(ユニティ機能を使うと)仮想PC側のWindowでは「Ctrl+"hoge"」キーを使うことができなくなる。CtrlとCapsLKを入れ替えていることが原因なのかもしれないが、これでは使いたいけれども使えない・・・というのが残念なところだ。
2009-06-04[n年前へ]
■Windows VISTAとXPの「バッチファイルの動き方」の違い
Windowsでファイルを加工するスクリプトを作り、処理するファイルをドラッグアンドドロップして使うことができるように、バッチファイル(*.bat)を書いた。つまり、たとえば、こんなようなバッチファイルを書いた。
perl hoge.pl %1ところが、こんなバッチファイルを使おうとすると、Windows VISTA では意図した通りに動くのに、Windows XPでは動かないのである。
その原因を追いかけてみると、バッチファイルを起動したときの挙動がWindowsのバージョンによって異なっていることが原因だった。あるいは、コマンドプロンプトのカレントディレクトリがどうなっているかを、私が意識していなかったことに原因があった。
どういうことかと言うと、Windows VISTA では、バッチファイルをダブルクリックした時には、そのバッチファイルがあるディレクトリを「カレントディレクトリ」として起動したコマンドプロンプト内でバッチファイルに書かれた内容が処理される。ところが、バッチファイルにファイルをドラッグアンドドロップすると、そのバッチファイルは「ドラッグアンドドロップしたファイルがあるディレクトリ」をカレントディレクトリとして、コマンドプロンプトが起動し処理が行われる、という挙動になる。
しかし、Windows XP では、『バッチファイルをダブルクリックすると、そのバッチファイルがあるディレクトリを「カレントディレクトリ」として起動したコマンドプロンプト内でバッチファイルに書かれた内容が処理される』というところまでは同じなのだが、バッチファイルにファイルをドラッグアンドドロップした場合には、そのバッチファイルは"C:\Documents and Settings\ユーザ名"をカレントディレクトリとして起動したコマンドプロンプト内で処理されるのである。そういう違いがVISTAとXPのバッチファイルの間にはあった。
先のバッチファイルの場合、バッチファイルから呼ばれるスクリプトが、「バッチファイルがあるディレクトリがカレントディレクトリである」ことを前提としていたので、Windows VISTA では動くのに、Windows XPでは動かない、ということが起きた。
いつものように、「思い込み」は危険だと思うと同時に、コマンドプロンプトやバッチファイルの沼も結構奥が深そうだ・・・と今さらながら感じたのである。このコマンドプロンプトやバッチファイルの「沼」に足を踏み入れてみるべきか、あるいは近寄らないようにするべきか・・・それが問題で思い悩んでいる。
2009-07-18[n年前へ]
2009-08-11[n年前へ]
■Windows + Ruby 1.8.7 + Rails 2.3.3 + MySQL 5.4.1 環境構築Tips
Windows + Ruby 1.8.7 + Rails 2.3.3 + MySQL 5.4.1 環境構築メモ
このままではdb:migrateする時に下記のエラーが出る。(MySQLの5.1以降に対応していないらしい)
そこで、PHP5.2のフォルダからlibmysql.dllをコピーしてきてRubyのbinフォルダに入れると解消した