Rubyのスクリプトは ExerbでExeファイルにできるのだが、Exeファイルに含まれているIconデータを使おうとして苦労したので、まとめてみる。
まず、ExeファイルにIconデータを含ませる方法。Exerb Projectのページ(レシピリファレンス)にあるように、resourceブロックにicoファイルを記述すればよい。
プログラム中でresourceブロックに指定したicoファイルのデータを扱うにはどうすればよいか?下記のようなコードでicoデータを扱える。
if defined? ExerbRuntime
extractIconA = Win32API.new('shell32','ExtractIconA',
'LPI','L')
#*.exeからアイコン情報を取得
ICON = extractIconA.Call(0,
ExerbRuntime.filepath+File.dirname($0),
0)
end
こうして取得したicoデータは、例えば create_trayicon()の第1引数に渡せば、 タスクトレイに表示されるアイコンとなる。
初め、ExerbRuntime.load_icon(0)とやってうまくいかなかった。引数の0が適切でなかったのかもしれないが、どうすればよかったのだろうか?