もきもき3D

アクセスカウンタ

zoom RSS Windows 7/Vistaで使用可能なアイコンライブラリ(ICL)の作成

<<   作成日時 : 2011/04/06 16:59   >>

驚いた ブログ気持玉 2 / トラックバック 0 / コメント 0

 Windows 7/Vistaはユーザビリティが退化して、ファイルタイプへアイコン登録する手段が提供されていない。
 直接レジストリを弄るか、yTools(http://hp.vector.co.jp/authors/VA020787/) 、FileDefaultIconChanger(http://surviveplus.net/)等のお世話になる。
 但し、yToolsは危険かもw レジストリ内にバックアップコピーを作る為にレジストリが肥大化するのと、(原因特定出来てないけど)復帰させたら該当ファイルタイプへのアイコン変更が効かなくなった。
 FileDef〜の方は単純にレジストリの該当項目を追加するだけっぽいから弊害はなさそう。

 んで、本題。 アイコンライブラリの作成。

 アイコンライブラリの実態はDLL。
 巷のアイコン作成フリーソフトでICLに対応してる物は@aicon(http://www.towofu.net/soft/)位?
 で、@aiconが吐くICLは昔からの16bit版のDLL(Vista向けオプションはICOの拡張対策でICL対策では無いっぽい)。
 Windows 7とVistaは16bit DLLを扱う機能が廃止された。
 なので、Windows 7からICL(16Bit DLL)を指定しても、無効だと言われてアイコンを使えない。
 32bit DLLであればshell32.dll等と同等になるので問題なく使える。 x64版Winなら、多分64bit DLLでも可。
 
用意する物。
 ※補足:
  Win32APIヘッダ(windows.h、w32api-3.17-2-mingw32-dev.tar.lzma)は不要っぽい。
  なので、windres.exe&ld.exeを取り出して、好みのディレクトリ/フォルダに置くだけでよい、という事に。
 *.lzmaは7Zipや、統合アーカイバプロジェクト( http://www.csdinc.co.jp/archiver/)のtar32.dll&同プロジェクト対応ソフト(LHMELT等)で解凍可能。


 MinGW(http://sourceforge.net/projects/mingw/)のBinUtils(binutils-2.20.51-1-mingw32-bin.tar.lzma)のwindres.exe&ld.exeと、同、Win32APIヘッダ(w32api-3.17-2-mingw32-dev.tar.lzma)。
 TDM-GCC(http://tdm-gcc.tdragon.net/download)からの方がピンポイントでDL出来てよさげ。
 BinUtilsの最新版(binutils-2.21-3-mingw32-bin.tar.lzma)を使う場合は、libintl-0.17-1-mingw32-dll-8.tar.lzmaも必要になるから注意。

 上記の物を一つのディレクトリ/フォルダに解凍して一応下準備は完了、のはず。
 (例:c:\MinGWに解凍、c:\MinGW\bin、c:\MinGW\include等になるように)。
 もし、○○が足りない/見つからない(Not Found)と言われたら、mingwrt-3.18-mingw32-dll.tar.gz、mingwrt-3.18-mingw32-dev.tar.gz、gcc-core-3.4.5-20060117-1.tar.gz を同様に解凍すれば解決すると思う。
 gcc-coreは4.5.2でも可(その場合はTDM-GCCで配布してる4.5.2がお勧め)。
 (一通り入った環境で実行してるので、実行時に実際に必要になる物は特定してない。 明示的に使うのはwindres.exe、ld.exe、windows.h)。


 次に、@aicon等で普通の単品アイコン(ICO)を作る。 マルチ アイコン(サイズ/色数のバリエーションを内包した物)として出力する。 バリエーションを含まないシングルアイコンでも問題無いと思うけど、未確認。

 次にwindres.exeでコンパイルするリソースファイル(以下の様な内容のテキストファイル)を作る。

 #include <windows.h>
 ID ICON "IconFile.ico" 纏める数だけ列挙する。 IDは100からにしておけば、取りあえず大丈夫だと思う。

〜〜例、ここから〜〜
 #include <windows.h>

 100 ICON "PayaPaya.ico"
 101 ICON "Goo.ico"
〜〜ここまで〜〜

 (上記内容でファイル名を foobar.rcとしてICOと同じディレクトリに保存したとする。)

 コマンドプロンプトを起動し、set path=%path%c:\MinGW\bin の様にパスを通す。
 システムの環境変数 pathに最初から追記しておいてもOK。

 ※補足:
  パスの通った任意のディレクトリや、rc、icoと同じディレクトリにwindresとldを置いてしまえばよい。


 foobar.rcを保存したディレクトリに移動して、以下を実行。

 windres -l 0x0411 -J rc -O coff foobar.rc -o foobar.res

 ※補足:
 64bit DLLにするなら対応しているwindres(--helpでpe-x86-64が出てくる物)で以下。
 windres -l 0x0411 -J rc -O coff -F pe-x86-64 foobar.rc -o foobar.res


 続けて以下を実行。

 ld -s -o foobar.dll foobar.res

 これで完成。 foobar.dllの名前は適当に代えてOK。

 上記例では PayaPayaが foobar.dll,0、Gooがfoobar.dll,1になる。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 2
驚いた 驚いた

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Windows 7/Vistaで使用可能なアイコンライブラリ(ICL)の作成 もきもき3D/BIGLOBEウェブリブログ
文字サイズ:       閉じる