実行ファイル、DLL内のリソースを見る(Rdres)


■ 概略説明
実行ファイル(*.exe)及び、DLLファイル(*.dll)内のリソースの内容を表示します。ここで言うリソースとは、ダイアログ、メニュー、ビットマップ等のウィンドウ用リソースです。プログラムの概観は下のイメージの様になっています。



イメージを見て御分かりの様に、左側のツリーは、選択したファイル内のリソース情報を示します。VisualC++のリソースツリーに似せてみました。各アイテムをダブルクリックするとその内容を右側のビューに表示します。(上のイメージはこのプログラムで自分自身を開いたものです。)
ビットマップ、アイコン、カーソルはそのイメージを表示します。しかし、ダイアログは外観を表示するのではなく各情報を文字で表示します。コントロールに関してはその行をダブルクリックする事により、その内容を別に表示します。その他はVisualC++の様に表示されます。
このプログラムはあくまで内容を見るだけで、編集は一切できません。
また、現バージョンでは全てのアイテムをサポートしていません。例えば、ツールバーはその情報が見つからなかったのでサポートしていません。サポートしているアイテムに関しては全てVisualC++のヘルプに載っています。(リソースの解析に関してはヘルプ以外は使用していません。)サポートしていないアイテムは、ファイルを開いた時に右側のビューにその内容が表示されます。このビューの呼出しはツールバーの[P]ボタンで見れます。
■ プログラムのポイント
1.外観
通常のSDIですが、プロジェクト作成時に、プロジェクトのスタイルを「Windows エクスプローラ スタイル」にしてみました。

2.リソース解析
リソースの解析は全て CResクラス(RcRead.cpp, RcRead.h)内で行っております。ここでは実行ファイルを解析し、共通構造体(RC_COMMON)iに全てのデータを保存します。後の表示処理はこの構造体を参照しているだけです。詳細はそれぞれのシステム関数をヘルプで見れば分かると思います。

3.ビューの切り替え
内容の表示に関しては、アイテムの種類毎にビューを作成して切り替えています。場所はCMainFrame内のChangeView()です。アイコンとカーソルは同じビューを使用しています。
■ 注意
あまりデバッグしていないので、バグがある可能性が非常に高いです。(見つけたら是非お知らせ下さい。)
■ 感想
なぜこの様なプログラムを作成したのかといいますと、実行ファイル内のメッセージ等を変更できないのかという疑問がきっかけでした。その後インターネットを見ているとシェアウェアでまさにその様なプログラムを販売しているのを見つけました。買うのも馬鹿らしいし、興味もあったのでヘルプを見ていると、関連する情報を発見しました。まずは、試しにとこのプログラムを作ってみました。編集処理も追加しようと考えましたが、今考えているのは違う方法です。それはバイナリーリソースファイル(*.res)です。VisualC++ではバイナリーのリソースファイルが扱えます。(試しに開いてみて下さい。)編集はこれを使えば完璧です。すなわち、exeファイルやdllファイルからバイナリーリソースファイルに分解し(逆リンク)VisualC++で編集しまた元の様に結合させてはどうか。こんな事を考えています。
■ ファイルのダウンロード
(MFC6.0プロジェクトファイル87KB)