function GetExeType(ExeName:string):integer; var F : File of byte; B,C : byte; W : Word; D : DWord; begin Result:=-1; AssignFile(F,ExeName); {$I-} {Datei nur zum Lesen öffnen:} FileMode:=0; Reset(F); if IOResult=0 then begin if FileSize(F)>$3C then begin {Die ersten beiden Bytes auslesen:} Seek(F,0); Read(F,B); Seek(F,1); Read(F,C); {Steht dort "MZ"?} if (B=$4D) and (C=$5A) then begin {Datei ist eine EXE} Result:=SCS_Unknown; {DWord auf Offset $3c auslesen:} Read(F,B); Seek(F,$3D); Read(F,C); W:=B+(C shl 8); Seek(F,$3E); Read(F,B); Seek(F,$3F); Read(F,C); D:=W+(B shl 16)+(C shl 24); {Word auf Offset $18 auslesen:} Seek(F,$18); Read(F,B); Seek(F,$19); Read(F,C); W:=B+(C shl 8); {Ist (Offset $18 >=$40) und (Offset $3c >0)?} if (W>=$40) and (D>0) then begin {Datei ist eine Windows-EXE} {Word auf Offset D auslesen:} Seek(F,D); Read(F,B); Seek(F,D+1); Read(F,C); {Steht dort "NE"?} if (B=$4E) and (C=$45) then {Datei ist eine 16-Bit-Windows-EXE} Result:=SCS_WOW_BINARY; if (B=$50) and (C=$45) then {Datei ist eine 32-Bit-Windows-EXE} Result:=SCS_32BIT_BINARY; end else {Datei ist eine DOS-EXE} Result:=SCS_DOS_BINARY; end; end; CloseFile(F); end; {$I+} end;