Windows with Delphi Windows API (94) Windows Filesystem (41) Windows Forms (69) Windows Graphics (38)
Exchange Links About this site Links to us 
|
Determine the type of an EXE File
This article has not been rated yet. After reading, feel free to leave comments and rate it.
Here's a function to return the platform the executable was designed for (16/32 bit Windows or DOS). Read the comment for the usage. This function works as well with DLLs, COMs, and maybe others. Thanks to Peter Below for this code.
Use it as shown at the bottom of the code snippet.
 | |  | |
type
TExeType = (etUnknown, etDOS, etWinNE );
function GetExeType(const FileName: string): TExeType;
var
Signature,
WinHdrOffset: Word;
fexe: TFileStream;
begin
Result := etUnknown;
try
fexe := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
try
fexe.ReadBuffer(Signature, SizeOf(Signature));
if Signature = $5A4D then
begin
Result := etDOS;
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(Signature, SizeOf(Signature));
if Signature = $454E then
Result := etWinNE
else
if Signature = $4550 then
Result := etWinPE;
end;
end;
finally
fexe.Free;
end;
except
end;
end;
begin
case GetExeType(aFileName) of
etUnknown: Label3.Caption := 'Unknown file type';
etDOS : Label3.Caption := 'DOS executable';
etWinNE : Label3.Caption := 'Windows 16-bit executable';
etWinPE : Label3.Caption := 'Windows 32-bit executable';
end;
end;
| |  | |  | You don't like the formatting? Check out SourceCoder then!
Comments:
|