Den Exetyp bestimmen

Erklärung
Diese Funktion liefert den Exetyp (also ob Dos/16-Bit/32-Bit)

Quelltext (Als ganze Unit abgebildet)
  unit UnitExetyp; 

       interface 

       uses 
         Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
         StdCtrls; 

       type 
         TForm1 = class(TForm) 
           OpenDialog1: TOpenDialog; 
           Button1: TButton; 
           Label1: TLabel; 
           procedure Button1Click(Sender: TObject); 
         private 
           { Private-Deklarationen } 
         public 
           { Public-Deklarationen } 
         end

       var 
         Form1: TForm1; 

       implementation 

       {$R *.DFM} 
       const EXE : array[0..3] of String = ('Unbekannter Datentyp', 
                                                             'Dos Programm', 
                                                             'Windows 16-Bit Programm', 
                                                             'Windows 32-Bit Programm'); 

       function ExeTyp(const Dateiname: string): integer; 
      
         [Konstante oben eingeführt] 
         Diese Funktion liefert den ExeTyp als Integer: 
         0: Unbekannter Datentyp 
         1: Dos Programm 
         2: Windows 16-Bit Programm 
         3: Windows 32-Bit Programm 
       } 

       var 
         Signatur, 
         WinHdrOffset: Word; 
         fexe: TFileStream; 
       begin 
         Result := 0; 
         try 
           fexe := TFileStream.Create(Dateiname, fmOpenRead or fmShareDenyNone); 
           try 
             fexe.ReadBuffer(Signatur, SizeOf(Signatur)); 
             if Signatur = $5A4D then 
               begin 
                 Result := 1; 
                 fexe.Seek($18, soFromBeginning); 
                 fexe.ReadBuffer(WinHdrOffset, SizeOf(WinHdrOffset)); 
                 if WinHdrOffset >= $40 then 
                   begin 
                     fexe.Seek($3C, soFromBeginning); 
                     fexe.ReadBuffer(WinHdrOffset, SizeOf(WinHdrOffset)); 
                     fexe.Seek(WinHdrOffset, soFrombeginning); 
                     fexe.ReadBuffer(Signatur, SizeOf(Signatur)); 
                     if Signatur = $454E then 
                       Result := 2 
                     else 
                       if Signatur = $4550 then 
                         Result := 3; 
                   end
               end
           finally 
             fexe.Free; 
           end
         except 
         end
       end

       procedure TForm1.Button1Click(Sender: TObject); 
       begin 
       if OpenDialog1.Execute then showmessage(Exe[ExeTyp(OpenDialog1.FileName)]); 
       end

       end