対象 | IE6のソース表示にメモ帳トラッパーを使いたい人 |
---|---|
公開/改記日 | 2001 09/21,09/22,10/27, 2002 03/29 |
以前ここで公開した情報とはかなり変わっているので、以前の情報を参照したい場合は古いバージョンのページをご覧ください。
IE6のソース表示をメモ帳トラッパー経由で行う場合、「IEのバージョンは不明です。」というエラーダイアログが毎回表示されてしまいます。さすがにこれはかなり気になるので、修正してみました。
いつものお約束ですが、このページに書かれていることを実行したことで問題が起きた場合でも私は責任とりませんので、それが嫌なら実行には移さないでください。
本当はソースで直せばいいのですが、メモ帳トラッパーの作者の方が最新版のソースを無くされてしまったとのことで最新版のソースがないので、最新版を強引に改造する方法、ひとつ前のバージョンではあるもののソースレベルできれいに直す方法の2つを挙げておきます。
最初に、両方に共通する点として修正対象のファイルを書いておきます。修正すべきファイルは、メモ帳トラッパーのインストールファイル
です。(具体的な修正方法は次の項で説明します。)Windowsディレクトリなどにあるセットアップ後のファイルではなく、インストール前のファイルを修正することに注意してください。(こうしないとコントロールアプレットが普通に修正できません。)これらのファイルに対して修正を行った後、普通にセットアップを行うのですが、メモ帳トラッパーが既にセットアップされている場合は先にメモ帳トラッパーのアンインストール作業が必要です。具体的には、コントロールパネルの「アプリケーションの追加と削除」からメモ帳トラッパーを削除し、Windowsを再起動します。そのあとセットアップしなおせばOKです。
まだセットアップをしたことが無ければアンインストールの作業は必要なく、普通にセットアップを行うだけです。
ただし、以前にセットアップをしたことがあるかどうかに関係なく、Windows2000などのシステム修復機構をもったWindowsの場合は、Win2000でメモ帳トラッパーを利用などを参考にしてセットアップをする必要があります。(dllcacheの中身を以前消した場合でも、メモ帳トラッパーのアンインストール時に復活するので注意。)
次のうちどちらかの方法で修正を行ってから、上のようにセットアップを行えば完了です。
最新版を使いたい、という人にはこれがお勧め。ただし、IEのバージョンが(たぶん)7.55以上になると改造が無効になってしまいます(どうしても嫌な人は一番下の方法を使ってください)。改造は、次の修正を加えるだけ。バイナリエディタが使える人なら簡単にできるでしょう。
0xB3FA番地の値が 0x64 になっているのを確認し、それを 0xFF に書き換えます。
0x2D9EC番地の値がやはり 0x64 になっているのを確認し、これも 0xFF に書き換えます。
バイナリエディタが使えない人のためにバイナリパッチを作りました。それを使いたい人はWindows用プログラムのページからダウンロードしてください。
こちらの場合、Delphi3以降が必要になります。とりあえず当方ではDelphi4 StandardとDelphi6 Personalで、次の方法により修正できることを確認しました。(確認したのはメモ帳トラッパー本体のみです。コントロールパネルアプレットはビルドできてないので分かりません。)
まず、ソースファイルをメモ帳トラッパーの作者であるTakeOne氏のサイト(日本Delphi振興会)のDelphiアクセサリのページからメモ帳トラッパーのソースをダウンロードし、適当なところに解凍します。
ファイルの148行目に次のような内容の部分があります。
case IeCVersion of 440..469: Result:=2; //IE2: 4.40 470 : Result:=3; //IE3: 4.70 471..499: Result:=4; //IE4: 4.71 500..599: Result:=5; //IE5: 5.00 else begin ShowMsg('IEのバージョンは不明です。'); Result:=0; end; end; end;
これを、次のように書き換えます。
case IeCVersion of 440..469: Result:=2; //IE2: 4.40 470 : Result:=3; //IE3: 4.70 471..499: Result:=4; //IE4: 4.71 else begin if IeCVersion>=500 then Result:=5 else begin ShowMsg('IEのバージョンは不明です。'); Result:=0; end; end; end; end;
Delphi4以降の場合は次の修正も必要です。delkabe.pasの675行目の
Wnd: HWND;
となっているところを、
Wnd: DWORD;
とします。
mmtrp.dprを開いてビルドしようとするとAboutBoxが無いとかいろいろ言われるので、ソースの説明で必要なさそうなものはガリガリ削除してください。正直な話、私はDelphi(pascal)がよく分かってないので、どこまで削っていいか分からないので断念しました。書き換え済みのソースを公開された方から連絡をいただいたので、メモ帳トラッパー for IE6にて公開されているソースを利用するのがいいでしょう。この場合は、上のソース書き換えも必要なくなります。
Delphiからビルドを行ってください。Delphiの使い方はここでは解説しませんので悪しからず。
mmtrp20.exeのファイル名をmmtrp.ex_に、mmtrp.cplのファイル名をmmtrp.cp_に変更して、メモ帳トラッパーのインストールファイルを上書きします。
今回問題になっているあたりの逆アセンブル結果を示します。
_0040BFD8 D945 F0 FLD dword ptr[EBP-10h] 40BFDB D80D 10C14000 FMUL dword ptr[40C110h] 40BFE1 E8 AE67FFFF CALL _00402794 40BFE6 05 48FEFFFF ADD EAX,FFFFFE48h 40BFEB 83E8 1E SUB EAX,+1Eh 40BFEE 72 0F JB _0040BFFF 40BFF0 74 14 JZ _0040C006 40BFF2 48 DEC EAX 40BFF3 83E8 1D SUB EAX,+1Dh 40BFF6 72 15 JB _0040C00D 40BFF8 83E8 64 SUB EAX,+64h 40BFFB 72 17 JB _0040C014 40BFFD EB 1C JMP _0040C01B
最初に示した方法で0x64のところ(40BFF8の最後)を0xFFにすると、次のようになります。
40BFF8 83E8 FF SUB EAX,-01h
IEのバージョンが7.55以上になっても大丈夫なようにするには、その次の分岐部分で分岐しないようにします。(この場合、分岐条件のチェックがなくなるので、0x64を0xFFにする必要はありません。)
40BFFB EB 17 JMP _0040C014
元のファイルでの書き換え位置は、最初の方法の次のアドレスです。0x72になってるのを0xEBにしてやればいいです。