Ruby/DLでWin32 APIのMessageBoxを呼んでみた
http://ttsky.net/ruby/ruby-dl.html
Rubyの添付ライブラリRuby/DLを使って、Win32 APIのMessageBoxでダイアログ表示をさせるコードを書いてみました。Ruby/DLの使い方は、上記のページにあるtutorialを参考にしました。
コードはこんな感じです。
require 'dl/import' module Win32 extend DL::Importable dlload 'user32.dll' typealias('HWND', 'void *') typealias('LPCTSTR', 'unsigned char *') typealias('UINT', 'unsigned int') extern 'int MessageBox(HWND, LPCTSTR, LPCTSTR, UINT)' # type flag MB_OK = 0 MB_OKCANCEL = 1 MB_ABORTRETRYIGNORE = 2 MB_YESNOCANCEL = 3 MB_YESNO = 4 MB_RETRYCANCEL = 5 # return values IDOK = 1 IDCANCEL = 2 IDABORT = 3 IDRETRY = 4 IDIGNORE = 5 IDYES = 6 IDNO = 7 end id = Win32.messageBox(nil, "本文\nOKですか?", "タイトル", Win32::MB_OKCANCEL) if id == Win32::IDOK puts 'OK!' end
実際の型がよく分からなかったので、HWND 型を void * 型と見なして、LPCSTR 型を unsigned char * 型と見なして typealias を設定したけれど、これで良いのだろうか?
とりあえず手元の環境(Windows XP)では正しく文字表示もできているので、おそらくこれで大丈夫そうなのだけれど。