const
InfoNum = 9;
InfoStr: array[1..InfoNum] of string = (
'ProductName',
'ProductVersion',
'FileDescription',
'LegalCopyright',
'FileVersion',
'CompanyName',
'LegalTradeMarks',
'InternalName',
'OriginalFileName'
);
var
S: string;
BufSize, Len: DWORD;
Buf: PChar;
Value: PChar;
begin
S := Application.ExeName;
BufSize := GetFileVersionInfoSize(PChar(S), BufSize);
if BufSize > 0 then begin
Buf := AllocMem(BufSize);
GetFileVersionInfo(PChar(S), 0, BufSize, Buf);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) then
memo1.Lines.Add(''+value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then
memo1.Lines.Add('产品版本: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then
memo1.Lines.Add('文件说明: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then
memo1.Lines.Add('合法版权: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then
memo1.Lines.Add('文件版本: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then
memo1.Lines.Add('公司名称: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then
memo1.Lines.Add('合法商标: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then
memo1.Lines.Add('内部名称: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then
memo1.Lines.Add('原文件名: ' + Value);
FreeMem(Buf, BufSize);
// OperatingSystem.Caption := GetOSVerInfo;
// SystemMemory.Caption := GetMemStat;
end
else begin
Application.MessageBox('获取产品信息时遇到致命错误,请尝试重新启动软件。'+ #13 + '若仍未能解决问题,请联系产品服务人员。','错误',MB_OK + MB_ICONSTOP);
Application.Terminate;
end;
以上程序粘贴在在相应的位置即可直接运行.(自己加一个memo1控件)
这个是获取程序自身版本的信息,我想修改成获取指定文件的版本信息。
InfoNum = 9;
InfoStr: array[1..InfoNum] of string = (
'ProductName',
'ProductVersion',
'FileDescription',
'LegalCopyright',
'FileVersion',
'CompanyName',
'LegalTradeMarks',
'InternalName',
'OriginalFileName'
);
var
S: string;
BufSize, Len: DWORD;
Buf: PChar;
Value: PChar;
begin
S := Application.ExeName;
BufSize := GetFileVersionInfoSize(PChar(S), BufSize);
if BufSize > 0 then begin
Buf := AllocMem(BufSize);
GetFileVersionInfo(PChar(S), 0, BufSize, Buf);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) then
memo1.Lines.Add(''+value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then
memo1.Lines.Add('产品版本: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then
memo1.Lines.Add('文件说明: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then
memo1.Lines.Add('合法版权: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then
memo1.Lines.Add('文件版本: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then
memo1.Lines.Add('公司名称: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then
memo1.Lines.Add('合法商标: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then
memo1.Lines.Add('内部名称: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then
memo1.Lines.Add('原文件名: ' + Value);
FreeMem(Buf, BufSize);
// OperatingSystem.Caption := GetOSVerInfo;
// SystemMemory.Caption := GetMemStat;
end
else begin
Application.MessageBox('获取产品信息时遇到致命错误,请尝试重新启动软件。'+ #13 + '若仍未能解决问题,请联系产品服务人员。','错误',MB_OK + MB_ICONSTOP);
Application.Terminate;
end;
以上程序粘贴在在相应的位置即可直接运行.(自己加一个memo1控件)
这个是获取程序自身版本的信息,我想修改成获取指定文件的版本信息。
InfoNum = 9;
InfoStr: array[1..InfoNum] of string = ('ProductName', 'ProductVersion', 'FileDescription', 'LegalCopyright', 'FileVersion', 'CompanyName', 'LegalTradeMarks', 'InternalName', 'OriginalFileName');function GetExeFileVersion(ExeFileName: string)
var
S: string;
BufSize, Len: DWORD;
Buf: PChar;
Value: PChar;
begin
BufSize := GetFileVersionInfoSize(PChar(ExeFileName), BufSize);
if BufSize > 0 then
begin
Buf := AllocMem(BufSize);
GetFileVersionInfo(PChar(S), 0, BufSize, Buf);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) then
memo1.Lines.Add(''+value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then
memo1.Lines.Add('产品版本: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then
memo1.Lines.Add('文件说明: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then
memo1.Lines.Add('合法版权: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then
memo1.Lines.Add('文件版本: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then
memo1.Lines.Add('公司名称: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then
memo1.Lines.Add('合法商标: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then
memo1.Lines.Add('内部名称: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then
memo1.Lines.Add('原文件名: ' + Value);
FreeMem(Buf, BufSize);
// OperatingSystem.Caption := GetOSVerInfo;
// SystemMemory.Caption := GetMemStat;
end
else
begin
Application.MessageBox('获取产品信息时遇到致命错误,请尝试重新启动软件。'+ #13 + '若仍未能解决问题,请联系产品服务人员。','错误',MB_OK + MB_ICONSTOP);
Application.Terminate;
end;
把这个s替换成你想获得版本的外部文件的名字即可~~
VerQueryValue(VerInfo,
'\VarFileInfo\Translation',
Pointer(lpTranslate),
cbTranslate);
if cbTranslate <> 0 then 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;
end;