完成したrubyスクリプトを実行するには、rubyスクリプト(通常、xxxx.rbのように拡張子が「rb」で終わるファイル)をダブルクリックしますが、処理が終了しても何も変化がないため、いつ終了したのか、確認しにくい場合があります。また、処理結果によって、メッセージを変更して表示したい場合があります。
このような場合にWindowsの機能を利用してメッセージを表示する方法について解説します。
一般的には、以下のようなスクリプトになります。
require 'Win32API'
を指定した後にメッセージボックスを表示するclassを定義します。実際にメッセージボックスを表示するには、以下のようなクラスをあらかじめ作成しておいた上で、
class Win32API def Win32API.MessageBox(wnd, text, caption, type = MB_OK) messagebox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i') messagebox.call(wnd, text, caption, type) end end
メッセージボックスを表示する位置に以下のようなスクリプトを記述します。
戻り値 = Win32API.MessageBox(0, "メッセージ", "キャプション", ボタンおよびアイコン)
ウィンドウに表示するボタンやアイコンには下記の表に示す数値の合計値をセットします。キャプション(メッセージを表示する画面のタイトル)やメッセージは「""」(ダブルクォーテーション)で囲んだ文字列を指定します。
たとえば、ボタンは[OK]ボタンと[キャンセル]ボタンを表示(数値 = 1)し、注意メッセージのアイコン(数値 = 48)を表示する場合は、1+48 = 49 をセットします。具体的には、
w_res = Win32API.MessageBox(0, "メッセージ", "キャプション", 49)
としてもいいのですが、何と何の合計かをわかりやすく表示するため、
w_res = Win32API.MessageBox(0, "メッセージ", "キャプション", 1+48)
とすることが望ましい方法です。
フラグ | 内 容 |
0 | [OK] ボタンのみを表示する。 |
1 | [OK] ボタンと [キャンセル] ボタンを表示する。 |
2 | [中止]、[再試行]、および [無視] の 3 つのボタンを表示する。 |
3 | [はい]、[いいえ]、および [キャンセル] の 3 つのボタンを表示する。 |
4 | [はい] ボタンと [いいえ] ボタンを表示する。 |
5 | [再試行] ボタンと [キャンセル] ボタンを表示する。 |
16 | 警告メッセージ アイコン(赤い円の中に×印)を表示する。 |
32 | 問い合わせメッセージ アイコン(吹き出しの中に?マーク)を表示する。 |
48 | 注意メッセージ アイコン(黄色い三角の中に!マーク)を表示する。 |
64 | 情報メッセージ アイコン(吹き出しの中に「i」)を表示する。 |
0 | 第 1 ボタンを標準ボタンにする。 |
256 | 第 2 ボタンを標準ボタンにする。 |
512 | 第 3 ボタンを標準ボタンにする。 |
以下に警告メッセージや問い合わせメッセージの表示サンプルを載せます。
rubyでWindowsのメッセージボックスのメッセージやキャプションに漢字等を使用する場合は、Ruby1.8以前の場合、$KCODEを使用し、Ruby1.9以降の場合は、マジックコメントを使用して、スクリプト(プログラム)の文字コードを指定しておきます。$KCODEやマジックコメントについては、[2-1-5.スクリプトの中で漢字を使う]を参照してください。
メッセージを表示した後、どのボタンをクリックしたかは、戻り値(例では、w_res)に整数値がセットされますので、if文を使って判断します。どのような戻り値がセットされるかについては、下記の表を参照してください。
戻り値 | クリックしたボタン |
0 | エラー(クリックした結果が戻り値に反映されなかった) |
1 | [OK] ボタン |
2 | [キャンセル] ボタン |
3 | [中止] ボタン |
4 | [再試行] ボタン |
5 | [無視] ボタン |
6 | [はい] ボタン |
7 | [いいえ] ボタン |
# coding:windows-31j # message.rb # 内容 : Windowsのメッセージを表示する。 # Copyright (c) 2002-2015 Mitsuo Minagawa, All rights reserved. # (minagawa@fb3.so-net.ne.jp) # 使用方法 : c:\>ruby message.rb # require "Win32API" class Win32API def Win32API.MessageBox(wnd, text, caption, type = MB_OK) messagebox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i') messagebox.call(wnd, text, caption, type) end end #下記のようにして、Windowsのメッセージを表示する。 # #$res = Win32API.MessageBox(0, "表示するメッセージ。", "画面のキャプション", ボタンおよびアイコン); # #if (w_res = 1) # ・・・・・ #end ### 警告メッセージのサンプル w_res = Win32API.MessageBox(0, "このファイルは実行してはいけません。", "警告メッセージのサンプル", 0 + 16) # OK ボタン if (w_res == 1) w_res = Win32API.MessageBox(0, "「OK」をクリックしました。", "メッセージのテスト", 0 + 64) end ### 問い合わせメッセージのサンプル w_res = Win32API.MessageBox(0, "これでよろしいですか?", "問い合わせメッセージのサンプル", 1 + 32) # OK ボタン if (w_res == 1) w_res = Win32API.MessageBox(0, "「OK」をクリックしました。", "メッセージのテスト", 0 + 64) # キャンセル ボタン elsif (w_res == 2) w_res = Win32API.MessageBox(0, "「キャンセル」をクリックしました。", "メッセージのテスト", 0 + 64) end ### 注意メッセージのサンプル w_res = Win32API.MessageBox(0, "このまま処理を続行しますか?", "注意メッセージのサンプル", 2 + 48) # 中止 ボタン if (w_res == 3) w_res = Win32API.MessageBox(0, "「中止」をクリックしました。", "メッセージのテスト", 0 + 64) # 再試行 ボタン elsif (w_res == 4) w_res = Win32API.MessageBox(0, "「再試行」をクリックしました。", "メッセージのテスト", 0 + 64) # 無視 ボタン elsif (w_res == 5) w_res = Win32API.MessageBox(0,"「無視」をクリックしました。","メッセージのテスト", 0 + 64) end ### 情報メッセージのサンプル w_res = Win32API.MessageBox(0,"内容が理解できましたか?","情報メッセージのサンプル", 4 + 64) # はい ボタン if (w_res == 6) w_res = Win32API.MessageBox(0,"「はい」をクリックしました。","メッセージのテスト", 0 + 64) # いいえ ボタン elsif (w_res == 7) w_res = Win32API.MessageBox(0,"「いいえ」をクリックしました。","メッセージのテスト", 0 + 64) end
スクリプトはこちらにあります(shift_jis形式で保存してください)。