delphi3000.com - the free delphi knowledge platform
delphi3000.com - the free delphi knowledge platform
455 Users Online NOW
Have a look at your member-status

connecting people's knowledge


  - Recent ArticlesRSS feed for Recent Articles on delphi3000.com
  - List of All Articles
  - Top Viewed Articles
  - Articles (+Attachem.)
  - Articles Of Interest
  - Categories
  - Top Uploader
  - Search
  - Index

  - My Home
  - Submit an Article
  - My Articles
  - My Personal Data
  - My Bookmarks
  - Activities
  - Login/Logout

  - Sign Up
  - Why Sign Up
  - Newsletter

  - Press
  - Advertise

  - Contact
  - Feedback





Community
Borland
ClubeDelphi
Dr. Bob
UK-BUG
Delphi Meetings
Planeta Delphi







Startblatt.de






Share this article with friendsShare this article with friends
Rate this articleRate this article - to keep the quality of delphi3000.com !
Comment this article or read through previous comments (0)


Getting an exe file typeFormat this article printer-friendly!Bookmark function is only available for registered users!
Product:
Delphi all versions
Category:
Files Operation
Skill Level:
Scoring:
Last Update:
12/27/2002
Search Keys:
delphi delphi3000 article borland vcl code-snippet Exe file type 16bit 32bit DOS
Times Scored:
5
Visits:
4386
Uploader: Lutfi Baran
Company:
Reference: N/A
 
Question/Problem/Abstract:
How can I get an exe file type?
Answer:



Is it useful,I don't know, but sometimes you want to know it.
Then, you will use below function which gives us an exe file type.


type
  TExeType = (Unknown, DOS, WinNE, WinPE);

const
  ExeStrings: array[TExeType] of string =
  ('Unknown', 'DOS', '16Bit', '32Bit');

function ExeFileType(const FileName: string): TExeType;
var
  Signature, HeaderOffsetAddress: Word;
  FileExe: TFileStream;
begin
  Result := Unknown;
  try
    FileExe := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
    try
      FileExe.ReadBuffer(Signature, SizeOf(Signature));
      if Signature = $5A4D { 'MZ' } then
        begin
          Result := DOS;
          FileExe.Seek($18, soFromBeginning);
          FileExe.ReadBuffer(HeaderOffsetAddress, SizeOf(HeaderOffsetAddress));
          if HeaderOffsetAddress >= $40 then
            begin
              with FileExe do
              begin
                Seek($3C, soFromBeginning);
                ReadBuffer(HeaderOffsetAddress, SizeOf(HeaderOffsetAddress));
                Seek(HeaderOffsetAddress, soFrombeginning);
                ReadBuffer(Signature, SizeOf(Signature));
              end;
              if Signature = $454E { 'NE' } then
                Result := WinNE
              else
                if Signature = $4550 { 'PE' } then
                  Result := WinPE;
            end;
        end;
    finally
      FileExe.Free;
    end;
  except
  end;
end;

//sample call;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(ExeStrings[ExeFileType('C:\windows\calc.exe')]);
end;





Please rate this article!
Skill level:
BeginnerExpert

Useful:
No!Very!

Overall rating:
PoorExcellent



Comments to this article
Write a new comment













 
Sign up to consume product discounts for Bronze memberships !

read more


  Visit our Sponsor

 

  Community Ad of
D. Souchard
 
   














 







     
  Copyright © 2000 - 2007 delphi3000.com - All rights reserved. Terms of use. || Privacy
delphi3000.com is a service by bluestep.com IT-Services GmbH (Vienna)