Mega Code Archive

 
Categories / Delphi / Examples
 

How to define binary exe type

Title: How to define binary exe type {1.} function GetEXEType(FileName: string): string; var BinaryType: DWORD; begin if GetBinaryType(PChar(FileName), Binarytype) then case BinaryType of SCS_32BIT_BINARY: Result := 'Win32 executable'; SCS_DOS_BINARY: Result := 'DOS executable'; SCS_WOW_BINARY: Result := 'Win16 executable'; SCS_PIF_BINARY: Result := 'PIF file'; SCS_POSIX_BINARY: Result := 'POSIX executable'; SCS_OS216_BINARY: Result := 'OS/2 16 bit executable' else Result := 'unknown executable' end else Result := 'File is not an executable'; end; procedure TForm1.Button1Click(Sender: TObject); begin label1.Caption := GetEXEType('c:\windows\notepad.exe'); end; { Windows NT/2000: Requires Windows NT 3.5 or later. Windows 95/98: Unsupported. } {********************************************************************} {2.} type TExeType = (etUnknown, etDOS, etWinNE {16-bit}, etWinPE {32-bit}); function GetExeType(const FileName: string): TExeType; { func to return the type of executable or dll (DOS, 16-bit, 32-bit). } (************************************************************** Usage: with OpenDialog1 do if Execute then begin Label1.Caption := FileName; Label2.Caption := ExeStrings[GetExetype(FileName)]; end; - or - case GetExeType(OpenDialog1.FileName) of etUnknown: Label3.Caption := 'Unknown file type'; etDOS : Label3.Caption := 'DOS executable'; etWinNE : {16-bit} Label3.Caption := 'Windows 16-bit executable'; etWinPE : {32-bit} Label3.Caption := 'Windows 32-bit executable'; end; ***************************************************************) 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 { 'MZ' } 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 { 'NE' } then Result := etWinNE else if Signature = $4550 { 'PE' } then Result := etWinPE; end; end; finally fexe.Free; end; except end; end; procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then case GetExeType(OpenDialog1.FileName) of etUnknown: Label_ExeType.Caption := 'Unknown file type'; etDOS : Label_ExeType.Caption := 'DOS executable'; etWinNE : Label_ExeType.Caption := 'Windows 16-bit executable'; etWinPE : Label_ExeType.Caption := 'Windows 32-bit executable'; end; end;