2009年9月14日月曜日

WinDialog

Windows のコモンダイアログを利用するための Ruby ライブラリです。

http://sites.google.com/site/yoshinoborinlibrary/home/ruby-library/windialog

Ruby 1.8 の標準ライブラリのみを使っていますので、windialog.rb にさえ $RUBYLIB のパスが通っていれば、何も gem install しなくても使えます。

しばしば利用する、以下の4つのダイアログボックスを、メソッド呼び出し一発で利用できます:
  1. message box (メッセージを表示します)
  2. input box (文字列を入力します)
  3. open file dialog (「ファイルを開く」ダイアログボックスです)
  4. save file dialog (「ファイルを保存する」ダイアログボックスです)
また、メソッドの引数はハッシュとして指定しますので、(少なくとも個人的には)使いやすいです。

まずは、メッセージボックスです:


上図のメッセージボックスを表示するコードは、以下のようになります:

require 'windialog'

pressed_button = WinDialog::message(
:title => 'Need to confirm with you...',
:message => 'Failed. Retry?',
:button => :retry_cancel,
:icon => :question,
:default_button => 2,
:modal => :application
)

次に、インプットボックスです:


require 'windialog'

puts WinDialog::input(
:title => 'Title',
:message => 'Prompt',
:default => 'Default'
)

最後に、open file dialog と save file dialog です。


require 'windialog'

filetypes = [
[ 'Ruby Scripts', ['.rb', '.erb'], 'TEXT' ],
[ 'Text Files', '.txt' ],
[ 'All Files', '*' ]
]

filename = WinDialog::open_file(
:title => 'Open a new file',
:filetypes => filetypes,
:initialdir => 'C:/cygwin/home/username/work',
:initialfile => 'foo.rb'
)

上記のサンプルコードにおいて、呼び出されるメソッド名を、open_file から save_file に変えると、open file dialog の代わりに、save file dialog が表示されます。Save file dialog の場合は、既存のファイルが選択されると、「既存のファイルが選択されたが、上書きするか?」と確認するダイアログボックスが表示されます。

ドキュメントは、いつも通り、rdoc 形式でソースファイル中に記述されています。


2009年9月5日土曜日

WinApp

Ruby から Windows アプリケーションを操作するためのライブラリです。
Windows アプリケーションを COM オブジェクトとして操作するのではなく、キーストロークを与えて操作します。


以下のコード例では、メモ帳を実行して、'Hello, world.\nHello, world.' と入力して、ファイル名 'test.txt' で保存します。

require 'winapp'

# メモ帳を実行する
notepad = WinApp.new('%windir%\system32\notepad.exe')

# キーストロークを与える
notepad.send_keys( 'Hello, world.' )
notepad.send_keys( '{ENTER}' )
notepad.send_keys( 'Hello, world.' )
notepad.send_keys( '%FA' ) # Alt+F, A
notepad.send_keys( '%N' ) # Alt+N
notepad.send_keys( 'test.txt' )
notepad.send_keys( '%S' ) # Alt+S
sleep 0.5

# メモ帳を終了する
notepad.terminate

2009年9月10日追記: WinApp::alive? のバグを修正しました。

2009年8月2日日曜日

INI

ブログ初投稿です。

Windows の .ini ファイルを読み込む Ruby クラスを作成しました。
.ini フィルにタブが含まれている場合の挙動がおかしいですが、とりあえずアップロードします。
Ruby の YAML クラスと似たインターフェイスを持たせています。(といっても、現時点では、load と load_file だけをサポートしています。)
例えば、次のような mailaccount.ini ファイルに対して、

[SMTP]
Server = smtp.foo.com

[POP]
Server = pop.foo.com
User = jack

以下の Ruby コードを実行すると、cfg に mailaccount.ini の中身が Hash オブジェクトとして読み込まれます:

require 'ini'

cfg = INI.load_file( 'mailaccount.ini' )

p cfg['SMTP']['Server'] # => "smtp.foo.com"
p cfg['POP' ]['Server'] # => "pop.foo.com"
p cfg['POP' ]['User' ] #=> "jack"

ini.rb というファイル名で $RUBYLIB でパスのとおっているディレクトリに格納してご利用ください。

より詳細なドキュメントは、rdoc 形式でソースに埋め込んでいますので、以下の手順でご覧ください:
  1. (rdoc がインストールされていない環境では) gem install rdoc を実行する。
  2. $RUBYLIB で、rdoc -U ini.rb を実行。
  3. $RUBYLIB/doc/index.html をブラウザで開く。