EXEのアイコン変更 – プログラミング – Home

通知
すべてクリア

EXEのアイコン変更


maki
 maki
(@maki)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

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

環境:WinXP/VC7.0

よろしくお願いします。


引用解決済
トピックタグ
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

LoadLibraryで読めるのは.exeや.dllです。
リソース用DLL等ならいけると思いますが、.icoは無理なのでは。

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


返信引用
ぬふや
 ぬふや
(@ぬふや)
ゲスト
結合: 18年前
投稿: 34
 

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

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> EXEのアイコンを書き換えて保存するとか、

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


返信引用
ぬふや
 ぬふや
(@ぬふや)
ゲスト
結合: 18年前
投稿: 34
 

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


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

質問者の方にはっきり説明してもらった方が良いみたいですね。
今回の質問の内容ではどちらがしたいと思っているのかわかりませんし。

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


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

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

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

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

書き換え対象の exe を LoadLibrary してるとはどこにも書いてないので、
意図は明確かなぁ、と思うんだけど。

えー、念のため整理。

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

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

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

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


返信引用
maki
 maki
(@maki)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

遅くなってすみません><

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

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

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

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

これが参考になるかな?
http://msdn2.microsoft.com/en-us/library/ms648007.aspx

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

書き換え対象の exe を LoadLibrary してる?
その必要はないので、もしロードしてるならやめてください。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました