16,748
社区成员
发帖
与我相关
我的任务
分享
function GetFileVersion(fn: string; var ma, mi, r ,b: integer):boolean;//得到本程序的版本号
var
buf, p: pChar;
sver: ^VS_FIXEDFILEINFO ;
i: LongWord;
begin
i:= GetFileVersionInfoSize(pchar(fn), i);
new(sver);
p:= pchar(sver);
GetMem(buf, i);
ZeroMemory(buf, i);
result:= false;
if GetFileVersionInfo(pchar(fn), 0, 4096, pointer(buf)) then
if VerQueryValue(buf, '/', pointer(sver), i) then begin
ma:= sVer^.dwFileVersionMS shr 16;
mi:= sver^.dwFileVersionMS and $0000ffff;
r:= sver^.dwFileVersionLS shr 16;
b:= sver^.dwFileVersionLS and $0000ffff;
result:= true;
end;
Dispose(p);
FreeMem(buf);
end;
function GetFileVersionString(const AFileName: String): String;
var
FileName: string;
InfoSize, Wnd: DWORD;
VerBuf: Pointer;
FI: PVSFixedFileInfo;
VerSize: DWORD;
begin
Result := '';
FileName := AFileName;
UniqueString(FileName);
InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
if InfoSize <> 0 then
begin
GetMem(VerBuf, InfoSize);
try
if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then
begin
Result:= InttoStr(FI.dwFileVersionMS div $10000)+'.'
+IntToStr(FI.dwFileVersionMS mod $10000)+'.'
+IntToStr(FI.dwFileVersionLS div $10000)+'.'
+IntToStr(FI.dwFileVersionLS mod $10000);
end;
finally
FreeMem(VerBuf);
end;
end;
end;