Função para verificar as propriedades do arquivo

function Tf_RE.VerificaPropriedadeArquivo(Arquivo,Propriedade: String): String;
const
  InfoNum           = 10;
  InfoStr           : Array[1..InfoNum] of String =
    ('CompanyName', 'FileDescription', 'FileVersion', 'InternalName',
    'LegalCopyright', 'LegalTradeMarks', 'OriginalFilename',
    'ProductName', 'ProductVersion', 'Comments');
var
  fCompanyName      : String;
  fFileDescription  : String;
  fFileVersion      : String;
  fInternalName     : String;
  fLegalCopyright   : String;
  fLegalTradeMark   : String;
  fOriginalFileName : String;
  fProductName      : String;
  fProductVersion   : String;
  fComments         : String;
  S                 : String;
  Len               : Cardinal;
  n                 : Cardinal;
  Buf               : PChar;
  Value             : PChar;
begin
  S := Arquivo;
  n := GetFileVersionInfoSize(PChar(S), n);
  if n > 0 then begin
     Buf := AllocMem(n);
     try
       GetFileVersionInfo(PChar(S), 0, n, Buf);
       if VerQueryValue(Buf, PChar('StringFileInfo\041604E4\' +
         InfoStr[1]), Pointer(Value), Len) then
         fCompanyName := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo\041604E4\' +
         InfoStr[2]), Pointer(Value), Len) then
         fFileDescription := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo\041604E4\' +
         InfoStr[3]), Pointer(Value), Len) then
         fFileVersion := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo\041604E4\' +
         InfoStr[4]), Pointer(Value), Len) then
         fInternalName := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo\041604E4\' +
         InfoStr[5]), Pointer(Value), Len) then
         fLegalCopyright := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo\041604E4\' +
         InfoStr[6]), Pointer(Value), Len) then
         fLegalTradeMark := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo\041604E4\' +
         InfoStr[7]), Pointer(Value), Len) then
         fOriginalFileName := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo\041604E4\' +
         InfoStr[8]), Pointer(Value), Len) then
         fProductName := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo\041604E4\' +
         InfoStr[9]), Pointer(Value), Len) then
         fProductVersion := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo\041604E4\' +
         InfoStr[10]), Pointer(Value), Len) then
         fComments := Value;
     finally
       FreeMem(Buf, n);
     end;
  end
  else begin
      fCompanyName := '';
      fFileDescription := '';
      fFileVersion := '';
      fInternalName := '';
      fLegalCopyright := '';
      fLegalTradeMark := '';
      fOriginalFileName := '';
      fProductName := '';
      fProductVersion := '';
      fComments := '';
  end;
  result := '?????';
  if Propriedade = 'CompanyName' then result := fCompanyName;
  if Propriedade = 'FileDescription' then result := fFileDescription;
  if Propriedade = 'FileVersion' then result := fFileVersion;
  if Propriedade = 'InternalName' then result := fInternalName;
  if Propriedade = 'LegalCopyright' then result := fLegalCopyright;
  if Propriedade = 'LegalTradeMarks' then result := fLegalTradeMark;
  if Propriedade = 'OriginalFilename' then result := fOriginalFileName;
  if Propriedade = 'ProductName' then result := fProductName;
  if Propriedade = 'ProductVersion' then result := fProductVersion;
  if Propriedade = 'Comments' then result := fComments;
end;