1,183
社区成员
发帖
与我相关
我的任务
分享
function GetVersion(Filename: String;lpCompanyName: PString = Nil): string;
var
VerInfoSize: DWORD;
VerInfo: Pointer;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
lpTranslate:PLANGANDCODEPAGE;
cbTranslate: LongWord;
VerCompany: PAnsiChar;
Dummy: DWORD;
Data: String;
begin
Result := '0.0.0.0';
VerInfoSize := GetFileVersionInfoSize(PChar(Filename), Dummy);
if VerInfoSize = 0 then Exit;
GetMem(VerInfo, VerInfoSize);
try
GetFileVersionInfo(PChar(Filename), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
with VerValue^ do
begin
dwProductVersionMS := dwFileVersionMS;
dwProductVersionLS := dwFileVersionLS;
Result :=Format('%d.%d.%d.%d', [
dwProductVersionMS shr 16,
dwProductVersionMS and $FFFF,
dwProductVersionLS shr 16,
dwProductVersionLS and $FFFF
]);
end;
if lpCompanyName = Nil then Exit;
VerQueryValue(VerInfo,
'\VarFileInfo\Translation',
Pointer(lpTranslate),
cbTranslate);
if cbTranslate = 0 then Exit;
//for I := 0 to cbTranslate - 1 do begin
Data := format('\StringFileInfo\%.4x%.4x\CompanyName',[lpTranslate^.wLanguage,lpTranslate^.wCodePage]);
VerQueryValue( VerInfo
, PAnsiChar(data)
, Pointer(VerCompany)
, VerValueSize);
if VerValueSize <> 0 then begin
SetString(lpCompanyName^, VerCompany, VerValueSize-1);
end;
Inc(lpTranslate, sizeof(LANGANDCODEPAGE));
//end;
finally
FreeMem(VerInfo);
end;
end;