PDA

Ver la Versión Completa : Saber si un programa esta hecho en Delphi


seoane
08-06-2006, 16:49:52
A veces podemos tener curiosidad por saber si un programa esta echo en Delphi, para eso podemos utilizar una marca que deja el compilador en el TimeStamp del ejecutable.


function HechoEnDelphi(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;


Ejemplo de uso:

// Vamos a comprobar nuestro propio programa
if HechoEnDelphi(ParamStr(0)) then
ShowMessage('Sorpresa, estoy hecho en delphi !!!');