Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi GetFileVersionInfo() (https://www.delphipraxis.net/48002-getfileversioninfo.html)

retnyg 19. Jun 2005 11:39


GetFileVersionInfo()
 
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;

retnyg 19. Jun 2005 12:16

Re: GetFileVersionInfo()
 
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:

Zitat von sakura
Zitat:

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...



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz