Ich benutze folgenden Code, um die Dateiversion aus der Ressource auszulesen:
Delphi-Quellcode:
function GetVersion(var VersionString, Description: string): DWORD;
var
VerInfoSize : DWORD;
hMem : THandle;
VerInfo : Pointer;
VerValueSize : DWORD;
VerValue : PVSFixedFileInfo;
LangID : string;
Dummy : DWORD;
s : string;
begin
result := 0;
VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
if VerInfoSize <> 0 then
begin
hMem := GlobalAlloc(GPTR, VerInfoSize);
if hMem <> 0 then
begin
VerInfo := GlobalLock(hMem);
try
// Version
if GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo) then
begin
if VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize) then
begin
with VerValue^ do
begin
VersionString := Format('%d.%d.%d.%d', [dwFileVersionMS shr 16, dwFileVersionMS and $FFFF,
dwFileVersionLS shr 16, dwFileVersionLS and $FFFF]);
end;
end
else
VersionString := '';
// Description
if VerQueryValue(VerInfo, '\VarFileInfo\Translation', Pointer(VerValue), VerValueSize) then
begin
LangId := IntToHex(LoWord(PLongInt(VerInfo)^), 4) + IntToHex(HiWord(PLongInt(VerInfo)^), 4);
s := '\StringFileInfo\' + LangId + '\FileDescription';
if VerQueryValue(VerInfo, PChar(s), Pointer(VerValue), VerValueSize) then
Description := PChar(VerValue);
end
else
Description := '';
end;
finally
GlobalUnlock(hMem);
GlobalFree(hMem);
end;
end
else // GlobalAlloc
result := GetLastError;
end
else // GetFileVersionInfoSize
result := GetLastError;
end;
Wie man sieht, versuche ich auch an die Beschreibung zu kommen, nur klappt das nicht so ganz. Diese Zeile
Delphi-Quellcode:
// Description
if VerQueryValue(VerInfo, '\VarFileInfo\Translation', Pointer(VerValue), VerValueSize) then
liefert immer False zurück. Kann mir da mal bitte jemand helfen das hinzubekommen? Danke.
Sorry, es ist Zeile 39, die immer False zurückliefert.