读取主版本号,此版本号,..., Build号,然后组合成字符串即可function TFormAbout.GetVersion(filename: string): string; var InfoSize, Wnd: DWORD; VerBuf: Pointer; szName: array[0..255] of Char; Value: Pointer; Len: UINT; TransString:string; begin //filename := 'D:\SFClient.dll'; InfoSize := GetFileVersionInfoSize(PChar(Filename), Wnd); if InfoSize <> 0 then begin GetMem(VerBuf, InfoSize); try if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then begin Value :=nil; VerQueryValue(VerBuf, '\VarFileInfo\Translation', Value, Len); if Value <> nil then TransString := IntToHex(MakeLong(HiWord(Longint(Value^)), LoWord(Longint(Value^))), 8); Result := ''; StrPCopy(szName, '\StringFileInfo\'+Transstring+'\FileVersion'); if VerQueryValue(VerBuf, szName, Value, Len) then Result := StrPas(PChar(Value)); end; finally FreeMem(VerBuf); end; end; end;抄自 http://expert.csdn.net/Expert/topic/1574/1574188.xml?temp=.7804224 (dolemin(骏驰) )
var
InfoSize, Wnd: DWORD;
VerBuf: Pointer;
szName: array[0..255] of Char;
Value: Pointer;
Len: UINT;
TransString:string;
begin
//filename := 'D:\SFClient.dll';
InfoSize := GetFileVersionInfoSize(PChar(Filename), Wnd);
if InfoSize <> 0 then
begin
GetMem(VerBuf, InfoSize);
try
if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
begin
Value :=nil;
VerQueryValue(VerBuf, '\VarFileInfo\Translation', Value, Len);
if Value <> nil then
TransString := IntToHex(MakeLong(HiWord(Longint(Value^)), LoWord(Longint(Value^))), 8);
Result := '';
StrPCopy(szName, '\StringFileInfo\'+Transstring+'\FileVersion');
if VerQueryValue(VerBuf, szName, Value, Len) then
Result := StrPas(PChar(Value));
end;
finally
FreeMem(VerBuf);
end;
end;
end;抄自 http://expert.csdn.net/Expert/topic/1574/1574188.xml?temp=.7804224
(dolemin(骏驰) )