• ベストアンサー

EXE/DLLに埋め込まれた画像

よくフリーソフトなどでEXE/DLL等に埋め込まれた画像を取り出すツールというものを見かけるのですが,そのツールを作るにはどのようにすればよいのでしょうか? また,モジュールに埋め込まれた画像を同じサイズの画像となら置き換える事ができる気もするのですが可能なのでしょうか?教えてください。 開発はVB6.0で行い処理の対象となるモジュールもVB6.0で作成されたものを想定しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

まず、どうやって埋め込んでるかは理解してますか? まずそこからですよね。 それがわかれば自分で調べられると思いますが。 で、埋め込みの方法は、リソースというものを使っています。VBでも作成可能です。 http://www.galliver.co.jp/writing/susume_vb/tre908/ 取得は 自分自身のリソース以外はVBだけでは出来ないのでLoadResource()、FindResource()などのAPIを使用する必要があります。 リソースの更新はUpdateResource()で可能ですが、9x系では動きません。 >また,モジュールに埋め込まれた画像を同じサイズの画像となら置き換える事ができる気もするのですが可能なのでしょうか?教えてください。 そういう単純な置き換えならこの方法でも可能だと思いますが、サイズといっても、もちろんファイルサイズが同じって意味ですよね?

tonytonychopper
質問者

補足

回答ありがとうございました。 さっそく以下のソースで試してみたのですが,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) --------- 置き換える画像は同じサイズという意味です(^^)

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>"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) と、すれば取得できるはずです。

tonytonychopper
質問者

お礼

お礼が遅くなって申し訳ございません。 ご指摘のとおりFindResourceの定義を変更すれば値を取得することができました。 ありがとうございました。

関連するQ&A

  • exeとdll

    こんにちわ。 いまVB6.0で開発しています。 メイン(exe)が1つと,それとは独立したサブ(exe)が1つある構成です。 今回メインのなかからサブを呼び出す仕組みに変えたいのですが, このような場合,サブはdllにしたほうが良いのでしょうか? それからそもそもユーザアプリケーションをdll化するメリット(理由)はどういうものでしょうか? 教えてください。 よろしくお願いします。

  • EXEまたはDLLの実行方法

    ASPからVBにて作成したEXE or DLLを起動して ファイルダウンロードを実施しようと思っております。 ASP初心者の為、その様な事が可能なのかも判断ついておりせん。 もし、可能であれば実装方法を教えて下さい。 VBではSQLServerからデータ抽出してCSV形式の ファイル作成処理を行っております。

  • ActiveX DLL と ActiveXコントロールの違い

    VB6で開発をしています。 複数のEXEファイルを使用するシステムです。 各EXEファイルの共通のモジュールをライブラリ化しようと思っています。 これは [ActiveX DLL] 又は、[ActiveXコントロール] のどちらでも実現できると思うんですが、どちらで作成した方が良いのでしょうか? それぞれのメリット、デミリットを教えて下さい。

  • mfc42.dllファイルってなんですか?

    こんにちは。 最近、プログラムの勉強をしている物ですが、例えばVBであるシステムを開発して、SetUpを作った際に、色々なプラットフォームで検証するのですが、mfc42.dllというファイルが絡んだエラーが良く出ます。 そもそも「mfc42.dll」とは何でしょうか? OSインストール時に最初から入っているものなのでしょうか? dllファイルとはダイナミックリンクライブラリの事で、OSが色んな時に使用する共通の関数が詰まっている、VBでいう標準モジュールのようなものの事ですよね?(合ってますか(^^;)?) mfc42.dllがそうなら、どういうときに使用されるのでしょうか? また、Aというソフトをインストールした後で、Bというソフトをインストールして、互いのmfc42.dllの更新日時(バージョン?)が違う場合、Bをインストールする事によってAが動かなくなる・・・というのもありえるのでしょうか?? だとしたらとても怖い事ですよね!? でもSetUp作成ソフトやVB標準のディストリビュージョンでSetUp.exeをつくると勝手にmfc42.dllが紐付かれてしまう場合が多々あります。 これを回避する方法はあるのでしょうか? どなたかご教授下さい。

  • メニューEXEよりdllを呼び出す方法

    Vb.Netで、メニューEXEより、プログラムdllを呼び出す場合なのですが、VB6.0ですと、CreateObjectを使用して呼び出すことが可能だと思いますが、.NETにて同じ事を行おうと考えた場合、どのように作ればよいのでしょうか? 私が調べた感じでは、メニューEXEの参照設定にプログラムdllを追加させる方法です。 上記方法ですと、プログラムdllが増えるたびにEXEに項目を追加しないとまずく、非効率だと思うのですが…

  • VBにてexeを実行させる方法

    環境OS:2000 開発ツール:VB,ACCESS,TDBGrid を用いてDBシステムを作成したのですが ・VB や その他のツールをインストールした端末にて  exe を実行できるのですが ・ツールを全くインストールしていない端末では一部  しか動作しません 開発時、[プロジェクト]-[参照設定]or[コンポーネント] の設定は変更いたしました 予想では dll,ocx ファイルが無いのが原因かなと 思っています この場合,どのようなファイルをどこに入れると、 ツールのインストールしていない端末でも動作するのでしょうか? 教えて下さい

  • ACCESSのEXEを作るのは可能ですか?

    VBでアプリケーション開発後EXEを作成する事が出来るのは 知っているのですが、どうやら、ACCESSでもEXEが作成 出来ると聞いて調べているのですが、全く何もわかりません。。。 誰か、ご存知でしたら教えて頂けませんでしょうか???

  • VCやVBで作成したDLLがどのEXEから起動されているか知りたい。

    VBやVCで作成したDLLがそれぞれあります。 それぞれは複数のEXEから起動されます。 DLLの中でどのEXEから起動されたか知りたいんですが なにか方法はありませんか? 起動している関数などにパラメータを追加できない事情がありまして・・・ よろしくお願いします。

  • 16ビットDLLから32ビットDLLをコールする方法

    現在VC++で「16ビットDLLから32ビットDLLをコール」をしようと思って 調べていましたが、このご質問に頼るしか方法がなく、困っています。 状況  VB4.0(16bit)・・・16bit版でEXEを作成  VC++1.51・・・・・16bitDLLを作成  VC++4.0/6.0・・・・32bitDLLを作成  VB4.0(16bit)のEXEから、16bit版のDLLをコールし処理を行いたいの  ですが、16bit版DLLで扱えないVC++の関数(プロセス関数:spawn??())  を利用しなければならず、16bit版DLLの機能を32bit版DLLで作成し、  16bit版DLLから32bit版DLLを呼び出そうと思っております。 誰か助けて! 是非、皆様のお知恵を拝借致したく思います。

  • バッチファイルをexeへ

    バッチファイルで一連の処理を行うようなツールを作ったのですが、他者に実行内容を見せたくありません。 (セキュリティー的に+見栄え的に) batをexeのようなバイナリの実行ファイルに お手軽変換するようなツール等はありますか? 開発環境:WindowsXP (VBやVCのような開発ソフトは持っていません) 実行環境:WindowsXP、Windows2000 以上、よろしくお願いします。