|
unit UnitExetyp;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
const EXE : array[0..3] of String = ('Unbekannter
Datentyp',
'Dos Programm',
'Windows 16-Bit Programm',
'Windows 32-Bit Programm');
function ExeTyp(const Dateiname: string): integer;
{
[Konstante oben eingeführt]
Diese Funktion liefert den ExeTyp als Integer:
0: Unbekannter Datentyp
1: Dos Programm
2: Windows 16-Bit Programm
3: Windows 32-Bit Programm
}
var
Signatur,
WinHdrOffset: Word;
fexe: TFileStream;
begin
Result := 0;
try
fexe := TFileStream.Create(Dateiname, fmOpenRead or fmShareDenyNone);
try
fexe.ReadBuffer(Signatur, SizeOf(Signatur));
if Signatur = $5A4D then
begin
Result := 1;
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(Signatur, SizeOf(Signatur));
if Signatur = $454E then
Result := 2
else
if Signatur = $4550 then
Result := 3;
end;
end;
finally
fexe.Free;
end;
except
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then showmessage(Exe[ExeTyp(OpenDialog1.FileName)]);
end;
end. |