EXEのアイコン変更

[戻る]
maki 2007/02/04(日) 11:20:24
EXEのアイコンを変更したいです。
以下の手順で試みましたが、LoadLibraryで.icoファイルをロードすると、
0が返ってきます。
LoadLibraryって、アイコンファイルはロードできないのでしょうか?
また、アイコンファイルをロードして、EXEのアイコンを変更する方法
があったら教えてください。
LoadLibrary
FindResource
LoadResource
LockResource
BeginUpdateResource
UpdateResource
EndUpdateResource
FreeLibrary


環境:WinXP/VC7.0

よろしくお願いします。

Ban 2007/02/04(日) 11:30:27
LoadLibraryで読めるのは.exeや.dllです。
リソース用DLL等ならいけると思いますが、.icoは無理なのでは。

.icoはLoadImageで読めませんか?

ぬふや 2007/02/04(日) 20:28:05
根本的な問題。
EXEのアイコンって、エクスプローラとかで表示されるEXEファイルのアイコンのことな
ら、APIなどで変更できる筈も無い。
EXEのアイコンを書き換えて保存するとか、ウィンドウのアイコンなら変更可能だ
が。

エクスプローラとかで表示されるEXEファイルのアイコンは、そのExeのリソースにア
イコンが有る場合はそこからロードされる。
複数ある場合はIDが一番最初のものだと思うけどその辺は知らない。

シャノン 2007/02/04(日) 20:36:02
> EXEのアイコンを書き換えて保存するとか、

UpdateResouce はまさにそれを行う API だが。

ぬふや 2007/02/05(月) 13:17:47
>UpdateResouce はまさにそれを行う API だが。
まぁ、そうなんだけど、Exeのアイコンを編集して保存しようと思ってるならロードす
るだの何だのって台詞は変だと思う。
よってウィンドウアイコン変えたいってだけの話か、自分のExeのアイコンをデフォル
トから変えられないって話かのどちらかかなぁ、と思った次第。

Ban 2007/02/05(月) 13:37:33
.icoを指定して.exeのアイコンを書き換える、
ツールのようなものを作りたいのかと(勝手に)思ってましたが。
.exeと.icoをロードしておいて、アイコンを移植(というとアレですが)するイメージ。

PATIO 2007/02/05(月) 14:30:49
質問者の方にはっきり説明してもらった方が良いみたいですね。
今回の質問の内容ではどちらがしたいと思っているのかわかりませんし。

実行ファイル自身のアイコンを置き換えようとしているのか
他の実行ファイルのアイコンを置き換えるツールを作ろうとしているのか
この辺がはっきりわかる説明をお願いします。>質問者の方

Ban 2007/02/05(月) 15:07:51
> 実行ファイル自身のアイコンを置き換えようとしているのか
> 他の実行ファイルのアイコンを置き換えるツールを作ろうとしているのか
> この辺がはっきりわかる説明をお願いします。>質問者の方

自分自身であっても実行時に差し替えたいなら結局同じなので、
ビルド時か、それ以外か、という方が近いような気もします。

いずれにせよ、質問者さんの回答待ち。

シャノン 2007/02/05(月) 15:39:50
書き換え対象の exe を LoadLibrary してるとはどこにも書いてないので、
意図は明確かなぁ、と思うんだけど。

えー、念のため整理。

質問者さんのお察しの通り、UpdateResource 系の API を使うことで、
他の EXE ファイルのアイコンを差し替えることはできます。
しかし、実行時に自分自身のファイルアイコンを変更することはできません。

また、ico ファイルは LoadLibrary できません。
アイコンリソースを含む EXE や DLL なら LoadLibrary できますが。

それから…
UpdateResource には、リソースのバイナリ表現を与えなければならない
わけですが…これってファイル形式とは必ずしも一致するとは限らないような?
EXE 内のアイコンリソースフォーマットと ico ファイルのフォーマットって
一致してるのかな?

#なんとなればシェル拡張ハンドラでアイコン変更することもできなくはない…

maki 2007/02/05(月) 23:55:54
遅くなってすみません><

質問がはっきりしなかったかも知れません。
やりたいことは、コンパイル済みEXEのアイコンを別のAPから変更する
ということです。

VisalStdioでEXEを開いてアイコンって書きかえれますよね。
ということは、APIとかでも、同じことができるんじゃないかと思いました。

EXE内のアイコンリソースフォーマットとicoファイルのフォーマット
は違うようです。
ICOファイルをfreadでメモリにロードして、UpdateResourceで
アイコンリソースを直接書き換えてみましたが、
EXEのアイコンはうまく変更されませんでした。

LoadImageでイメージをロードして、UpdateResourceで書き換えるということ
はトライしてみます。
また、シェル拡張ハンドラというのは初めて聞きましたが、調べてみます。
出来たら、参考になるサイトはありませんか?

シャノン 2007/02/07(水) 12:47:00
これが参考になるかな?
http://msdn2.microsoft.com/en-us/library/ms648007.aspx

PEファイルのリソースセクションが.resファイルそのまんまかどうかは、調べてみない
と分からないけど。
もし同じならば、アイコンリソースは.icoファイルそのまんまでいいんじゃないだろう
か。

シャノン 2007/02/07(水) 12:48:45
書き換え対象の exe を LoadLibrary してる?
その必要はないので、もしロードしてるならやめてください。

古いスレッドには追加発言できません。