![]() |
GetFileVersionInfo()
Ich verwende sakuras code von
![]() 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:
u.a. funktioniert es mit keiner einzigen DLL/EXE aus meiner Delphi 5 Installation.
getfileinfo(s,d,'C:\Programme\Borland\Delphi5\bin\rlink32.dll');
showmessage(s); 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; |
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:
|
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