[本文摘自BBS, 不能保证绝对正确, 仅供参考]

判断一个程序是否dos版本:

将文件头读进来,判断是否Exe
offset(0) -$5a45 'MZ'
offset($80) = 'PE' WIN32 EXE
offset($100) = 'NE' WIN16 EXE

e_magic:SmallInt
buffer:array[0..255] of byte;
FStream:TFileStream;

FStream:=TFileStream.Create(Filename,fmOpenRead+fmShareDenyNone);
Try
FStream.Read(buffer,256);
if SmallInt(buffer[0]) <>$5A4D then
FIsMSDos:=False
else
FIsMSDos:=True;

nPos:=$80

if (buffer[nPos+0]='P') and (buffer[nPos+1]='E') and (buffer[nPos+2]=#0) and (buffer[nPos+3]=#0) then
FIsPE:=True;

finally
FStream.Free;

nPos:=$100
if (buffer[nPos+0]='N') and (buffer[nPos+1]='E') then
FIsNE:=True;