Se me ocurre que podemos utilizar el echo de que delphi coloca en sus ejecutables donde deberia de ir el timestamp siempre el mismo numero (sus razones tendran). Ignoro si este metodo que propongo es muy de fiar, puede que otros compiladores coloquen el mismo numero en el timestamp pero ya seria mucha casualidad
Bueno aqui te dejo esta funcion, le pasas como parametro la ruta del ejecutable y si esta echo en delphi devuelve TRUE
Código Delphi
[-]
function isDelphi(Filename: string): Boolean;
const
BorlandMagicTimeStamp = $2A425E19;
var
hFile: THandle;
BytesRead: DWORD;
ImageDosHeader: TImageDosHeader;
ImageNtHeaders: TImageNtHeaders;
begin
Result := FALSE;
hFile := CreateFile(PChar(Filename), GENERIC_READ, FILE_SHARE_READ, nil,
OPEN_EXISTING, 0, 0);
if (hFile <> INVALID_HANDLE_VALUE) then
begin
if ReadFile(hFile, ImageDosHeader, SizeOf(TImageDosHeader),BytesRead, nil) then
if BytesRead = SizeOf(TImageDosHeader) then
if ImageDosHeader.e_magic = IMAGE_DOS_SIGNATURE then
if SetFilePointer(hFile, ImageDosHeader._lfanew, nil, FILE_BEGIN) <> $FFFFFFFF then
if ReadFile(hFile, ImageNtHeaders, SizeOf(TImageNtHeaders), BytesRead, nil) then
if BytesRead = SizeOf(TImageNtHeaders) then
if ImageNtHeaders.Signature = IMAGE_NT_SIGNATURE then
Result:= ImageNtHeaders.FileHeader.TimeDateStamp = BorlandMagicTimeStamp;
CloseHandle(hFile);
end;
end;