EXE を生成するのに使われた Delphi のバージョンを判定する
EXE ファイルをバイナリダンプする事で、使われた Delphi のバージョンを知る事ができます (コンソールアプリケーションではこの方法は使えません)。
Delphi のソース一式を貰った時に適当なバージョンの Delphi で開いてプロジェクトを壊す前に、使われた Delphi の バージョンを EXE ファイルから判定してみてはどうでしょうか?
判定手法
- 適当なバイナリエディタを用意する。
- Delphi製と思われるファイルをバイナリエディタにかける。
- フォームのプロパティ名等を検索する。
Delphi 製アプリケーションは EXE にフォームが含まれる場合、プロパティ名等がバイナリに含まれています。Delphi のバージョンにより、フォームのプロパティは増減していますので、これを検索する事で EXE を生成した Delphi のバージョンを知る事ができる、という訳です。
判定方法
- "TForm3D", "UsingDesignCamera" があり、"FStyleBookChanged" がある。
→Delphi XE4 (FireMonkey 3D アプリケーション)
- "ShowFullScreenIcon" がある。
→Delphi XE4 (FireMonkey HD アプリケーション)
- "ApplyNonBiDiKeyboard" がある。
→Delphi XE4 (VCL フォームアプリケーション)
- "TForm3D", "UsingDesignCamera" があり、"EnableBorderStyling", "FormFactor" がある。
→Delphi XE3 (FireMonkey 3D アプリケーション)
- "EnableBorderStyling", "FormFactor" がある。
→Delphi XE3 (FireMonkey HD アプリケーション)
- "StyleElements", "TipMode" がある。
→Delphi XE3 (VCL フォームアプリケーション)
- "TForm3D", "UsingDesignCamera" がある。
→Delphi XE2 (FireMonkey 3D アプリケーション)
- "StyleBook", "StyleLookup" がある。
→Delphi XE2 (FireMonkey HD アプリケーション)
- "UnitScope" がある。
→Delphi XE2 (VCL フォームアプリケーション)
- "csPaintBlackOpaqueOnGlass" がある。
→Delphi XE
- "TTouchManager","OnGesture" がある。
→Delphi 2010
- "CustomHint","UnicodeString" がある。
→Delphi 2009
- "GlassFrame" がある。
→Delphi 2007
- "AlignWithMargins" がある。
→Delphi 2006 / Turbo Delphi
- "PopupMode" がある。
→Delphi 2005
- "QForms", "QStdCtrls" があり、"OnMouseEnter", "OnMouseLeave" がある。
→Delphi 7 (CLX フォームアプリケーション)
- "ScreenSnap" がある。
→Delphi 7
- "QForms", "QStdCtrls" がある。
→Delphi 6 (CLX フォームアプリケーション)
- "AlphaBlend" がある。
→Delphi 6
- "TMenuAnimations" がある。
→Delphi 5
- "OldCreateOrder" がある。
→Delphi 4
- "ParentFont" がある。
→Delphi 3
- すべて存在しない
→Delphi 2
上から順番に判定してみて下さい。プロパティ名等が存在した時点でバージョンが確定します。
Delphi 1 ~ XE4 で生成された EXE のアーカイブを用意しました。
- 新規作成で作った VCL フォームアプリケーションです。
- フォームには何も貼ってありません。
- デフォルトオプションでコンパイルされています。
- リリースビルドでコンパイルされています。
- Delphi 8 の Win32 コンパイラは VCL フォームアプリケーションを生成できないので Delphi 8 で生成された EXE は収録されていません。
判定テストにお使い下さい。フォームに何も貼っていないので、アンチウィルスソフトに誤検知されるかもしれませんが、ウィルスは混入していません。お使いのアンチウィルスソフトが誤検知した場合には各アンチウィルスソフトメーカーに検体としてお送り下さい。
※totonica氏作 Exe Detect を利用すると簡単に判定できます。
See Also: