Thema: Delphi GetFileVersionInfo()

Einzelnen Beitrag anzeigen

Benutzerbild von retnyg
retnyg

Registriert seit: 12. Feb 2005
193 Beiträge
 
#1

GetFileVersionInfo()

  Alt 19. Jun 2005, 12:39
Ich verwende sakuras code von http://www.delphipraxis.net/internal...ht=getfileinfo
um von dll/exe's den CompanyName auszulesen.
leider werden bei gewissen DLL's falsche/keine werte zurückgeliefert, z.b. bei denen von inprise.

Delphi-Quellcode:
   getfileinfo(s,d,'C:\Programme\Borland\Delphi5\bin\rlink32.dll');
   showmessage(s);
u.a. funktioniert es mit keiner einzigen DLL/EXE aus meiner Delphi 5 Installation.
Verwende ich hingegen die rechte maustaste im explorer, wird fehlerfrei Inprise Corporation, usw angezeigt.

Der VeryQueryValue-Aufruf mit \VarFileInfo\Translation liefert einen falschen wert zurück
woran liegt das ?

ich habe mir nun folgenden work-around "gezimmert". Ich denke aber mal dass es auch einen "sauberen" weg geben muss, an den richtige Translationwert zu kommen...

Delphi-Quellcode:
    VerQueryValue(buf, '\VarFileInfo\Translation', Translation, len );
    VersionValue := '\StringFileInfo\' + IntToHex(LoWord(LongInt(Translation^)), 4) +
        IntToHex(HiWord(LongInt(Translation^)), 4) + '\';
    goto next;
{    VersionValue := '\StringFileInfo\040904E4\'; }
    first:
    // let us try it the the "clean" way first
    inc(cardinal(p2),134);
    goto next2;
    first2:
    inc(cardinal(p2),$44);
    next2:
    Versionvalue := '\StringFileInfo\' + widechartostring(p2)+'\';
    next:
    for i := 0 to length(tfiNames)-1 do
    begin
     z:=versionvalue + tfiNames[tfiElements(i)];
     if VerQueryValue(Buf, PChar(z), Pointer(Value), Len) then
      result.fields[tfielements(i)] := Value
     else if p2 = buf then goto first
       else if cardinal(p2) = cardinal(buf) + 134 then goto first2;
    end;
  Mit Zitat antworten Zitat