重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

よくフリーソフトなどでEXE/DLL等に埋め込まれた画像を取り出すツールというものを見かけるのですが,そのツールを作るにはどのようにすればよいのでしょうか?

また,モジュールに埋め込まれた画像を同じサイズの画像となら置き換える事ができる気もするのですが可能なのでしょうか?教えてください。

開発はVB6.0で行い処理の対象となるモジュールもVB6.0で作成されたものを想定しています。

A 回答 (2件)

まず、どうやって埋め込んでるかは理解してますか?


まずそこからですよね。
それがわかれば自分で調べられると思いますが。

で、埋め込みの方法は、リソースというものを使っています。VBでも作成可能です。
http://www.galliver.co.jp/writing/susume_vb/tre9 …
取得は 自分自身のリソース以外はVBだけでは出来ないのでLoadResource()、FindResource()などのAPIを使用する必要があります。

リソースの更新はUpdateResource()で可能ですが、9x系では動きません。


>また,モジュールに埋め込まれた画像を同じサイズの画像となら置き換える事ができる気もするのですが可能なのでしょうか?教えてください。

そういう単純な置き換えならこの方法でも可能だと思いますが、サイズといっても、もちろんファイルサイズが同じって意味ですよね?

この回答への補足

回答ありがとうございました。

さっそく以下のソースで試してみたのですが,FindResourceからの戻り値が取得できません。

なぜでしょう?

"XXXXX.exe"はりソースエディタを使い,ビットマップにID"101"を設定しコンパイルしたモジュールです。
定数 RT_BITMAP = 2& はこのように定義しています。


Dim hRsrc As Long ' リソースハンドル
Dim hInstance As Long ' インスタンスハンドル

hInstance = LoadLibrary("XXXXX.exe")
hRsrc = FindResource(hInstance , "101", RT_BITMAP)

FreeLibrary(lnghInstance)

---------
置き換える画像は同じサイズという意味です(^^)

補足日時:2005/03/15 16:02
    • good
    • 0

>"XXXXX.exe"はりソースエディタを使い,ビットマップにID"101"を設定しコンパイルしたモジュールです。



"101"ではなく101ではありませんか?
また、FindResourceのDeclare文が以下のようになっていませんか?

Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (ByVal hInstance As Long, ByVal lpName As String, ByVal lpType As String) As Long


このAPIの第2引数と第3引数は文字列を要求しますが、上位16bitが0の32bit整数を受け取ることもあります。

>定数 RT_BITMAP = 2& はこのように定義しています。

これも数値ですよね。
ということで、

Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (ByVal hInstance As Long, ByVal lpName As Long, ByVal lpType As Long) As Long

とし、
hRsrc = FindResource(hInstance, 101, RT_BITMAP)
と、すれば取得できるはずです。
    • good
    • 0
この回答へのお礼

お礼が遅くなって申し訳ございません。

ご指摘のとおりFindResourceの定義を変更すれば値を取得することができました。
ありがとうございました。

お礼日時:2005/03/16 10:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!