memo

vrubyやexerbの実戦的メモ

ページ内リンク

exerb/vrubyでアイコンを変更する

あまり情報の無い?アイコン変更の方法を記しておきます。
方法として以下のような流れを取ります。
  1. exerbで*.exeのアイコンを変更する
  2. これだけだとvrubyのアイコンは変わらない(別物らしい)ので、 小技を使ってexeのリソースからアイコン情報を取得して 変更する。

実例

  1. アイコンを準備する
    私は toico というコマンドとImagemagickに入っているconvertを使って、 コマンドラインから作成しています。
    以下のシェルスクリプトをiconmakeという名で保存し、、
    #!tcsh
    if ($#argv != 0) then
        convert -colors 255 -geometry 16x16 $1 icon16.xpm
        convert -colors 255 -geometry 32x32 $1 icon32.xpm
        toico -o favicon.ico icon16.xpm icon32.xpm
    else
        echo "USAGE:"
        echo "% iconmake imagefile"
        echo "make 'favicon.ico' in this directory"
    endif
    

    以下のコマンドを呼び出せばxxx.jpgやxxx.pngなどから 16x16と32x32のマルチサイズのアイコンを作成できます。
    (xxx.jpgは正方形な画像である必要があります)
    % iconmake xxx.jpg
    

  2. exerbで*.exeのアイコンを変更する
    exe作成時にexerbコマンドではなくて、 以下のような自作スクリプトを呼び出して*.exe製作をします。
    exerb はversion-3.3.1を使用しています。
    #!ruby -Ks
    
    require "exerb/executable"
    require "exerb/resource"
    require "exerb/recipe"
    
    #製作するターゲット名
    TARGET = "win_rdtitle"
    #埋め込むアイコン名
    ICON = "favicon.ico"
    
    #レシピファイル
    ##事前に「ruby -r exerb/mkexr xxxx.rb」を実行して作成
    RECIPE = TARGET + ".exr"
    
    #出力ファイル名
    OUTPUT = TARGET + ".exe"
    
    #コアファイルを指定
    CORE = "c:/cygwin/usr/local/ruby/share/exerb/ruby182g.exc"
    
    #アイコンの指定
    ##前2つの16はアイコンのサイズ
    ##一番最後の8は 256色アイコンという意味(4なら16色アイコン)
    ##この辺りは埋め込むアイコンに応じて書き換える
    icon16 = Exerb::Resource::Icon.new_from_file(ICON, 16, 16, 8)
    icon32 = Exerb::Resource::Icon.new_from_file(ICON, 32, 32, 8)
    
    ##グループアイコン(多数のサイズを併せ持つようなの)の作成
    group_icon = Exerb::Resource::GroupIcon.new
    group_icon.add(1, icon16)
    group_icon.add(2, icon32)
    
    #リソースに埋め込んで作成
    recipe = Exerb::Recipe.new_from_file(RECIPE)
    executable = Exerb::Executable.new_from_file(CORE)
    executable.rsrc.add_icon(1, icon16)
    executable.rsrc.add_icon(2, icon32)
    executable.rsrc.add_group_icon(100, group_icon)
    executable.rsrc.add_archive(recipe.archive)
    executable.write_to_file(OUTPUT)
    

    ↑このようなスクリプトとMakefileを自動生成するスクリプトを 以下に用意しました。

    #使用例 Makefileとmake.rbが出来る
    % config.rb --target main.rb --core ruby182g.exc --ruby-home C:/cygwin/usr/local/ruby-1.8.2-i386-mswin32/
    # *.exeを作成
    % make
    

  3. vrubyのアイコンを変更する小技
    ここの変更方法 を元に、 出来上がった*.exe自身のリソースからアイコンを拝借して、 vrubyアイコンを変更します。
    #メインフレームの..
    module Frm_form1
      #起動時に呼ばれるメソッド内に記述
      def self_created
    
        #自分のexeファイル名
        exepath = "xxxx.exe"
        if test(?e, exepath)
          extractIconA = Win32API.new('shell32','ExtractIconA','LPI','L')
          #*.exeからアイコン情報を取得
          myIconData = extractIconA.Call(0, exepath, 0)
          #謎のコマンドで置き換える
          sendMessage(128, 0, myIconData)
        end
      ....  
    
    test()で括っているのは、 ソースから起動するとき等, *.exeが無い時にエラーにしないためです。

exerbビルドまでの準備方法

私のツールのページにある migemocsvのようなソフトをビルドするための準備方法です。

  1. ruby-win版をインストール
    ここ バージョン1.8.2 をダウンロードして、適当な場所に解凍する。
    最新版でなくて1.8.2なのは、 exerbのコアがこのバージョンを使用しているためです。
    以後 c:/cygwin/usr/local/ruby-1.8.2-i386-mswin32に解凍するとします。

  2. vrubyとswinのインストール
    ここ の以下の2つを取ってくる。 これらを以下のような感じでライブラリディレクトリに解凍して設置する。
    swin.soは以下に置く
    C:\cygwin\usr\local\ruby-1.8.2-i386-mswin32\lib\ruby\site_ruby\1.8\i386-msvcrt\swin.so
    vrubyは以下に置く
    C:\cygwin\usr\local\ruby-1.8.2-i386-mswin32\lib\ruby\site_ruby\1.8\vr\
    
  3. exerbのインストール
    ここ から exerb-3.3.1.tar.gz を持ってきて解凍し、コマンドラインやシェルなどから、、
     % cd exerb-3.3.1/
     % ruby setup.rb config
     % ruby setup.rb setup
     % ruby setup.rb install
    
    ここで注意は、「ここのrubyは1.でインストールしたwin32版」である事。
    cygwin等を用いている場合、
     % which ruby
     /bin/ruby
    
    になってたりしたら、cygwinの方のrubyなのでうまく行きません。。
    pathを書き換える等して対応してください。
    installまで実行すると、以下のような感じになるはずです。
    ライブラリが以下にインストールされます
    C:\cygwin\usr\local\ruby-1.8.2-i386-mswin32\lib\ruby\site_ruby\1.8\exerb
    コアファイルが以下にインストールされます
    C:\cygwin\usr\local\ruby-1.8.2-i386-mswin32\share\exerb
    
  4. これで準備完了!

[戻る]
Last Modified: 2006 / 06 / 23 (AM 07 : 49)