скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Определить тип EXE-файла 2



Оформил: DeeCo

 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;





Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook