AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetFileVersionInfo()

Ein Thema von retnyg · begonnen am 19. Jun 2005 · letzter Beitrag vom 19. Jun 2005
Antwort Antwort
Benutzerbild von retnyg
retnyg

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

GetFileVersionInfo()

  Alt 19. Jun 2005, 11: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
Benutzerbild von retnyg
retnyg

Registriert seit: 11. Feb 2005
193 Beiträge
 
#2

Re: GetFileVersionInfo()

  Alt 19. Jun 2005, 12:16
ich sollte wohl noch hinzufügen, dass auch der originalcode von sakura bei den fraglichen dateien falsche werte zurückliefert, ob es nun die versionsnummer ist, oder der companyname, ist eigentlich egal.

für mich ganz klar ein fehler von sakuras code.
Zitat von sakura:
Zitat von retnyg:
hallo sakura, ich verwende deinen code von http://www.delphipraxis.net/internal...ht=getfileinfo
leider werden bei gewissen DLL's falsche/keine werte zurückgeliefert.
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.
woran liegt das ?

Delphi-Quellcode:
   getfileinfo2(s,d,'C:\Programme\Borland\Delphi5\bin\rlink32.dll');
   showmessage(s);
Bitte im Forum fragen...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz