使用Delphi在windows下获取版本号以及对比版本号

// 获取版本号
function GetFileVersion(FileName: string): string;
type
PVerInfo = ^TVS_FIXEDFILEINFO;
TVS_FIXEDFILEINFO = record
dwSignature: longint;
dwStrucVersion: longint;
dwFileVersionMS: longint;
dwFileVersionLS: longint;
dwFileFlagsMask: longint;
dwFileFlags: longint;
dwFileOS: longint;
dwFileType: longint;
dwFileSubtype: longint;
dwFileDateMS: longint;
dwFileDateLS: longint;
 end;
var
ExeNames: array[0..255] of char;
zKeyPath: array[0..255] of Char;
VerInfo: PVerInfo;
Buf: pointer;
Sz: word;
L, Len: Cardinal;
begin
StrPCopy(ExeNames, FileName);
Sz := GetFileVersionInfoSize(ExeNames, L);
 if Sz = 0 then
 begin
Result := '';
Exit;
 end;
 try
GetMem(Buf, Sz);
 try
GetFileVersionInfo(ExeNames, 0, Sz, Buf);
 if VerQueryValue(Buf, '\', Pointer(VerInfo), Len) then
 begin
Result := IntToStr(HIWORD(VerInfo.dwFileVersionMS)) + '.' +
IntToStr(LOWORD(VerInfo.dwFileVersionMS)) + '.' +
IntToStr(HIWORD(VerInfo.dwFileVersionLS)) + '.' +
IntToStr(LOWORD(VerInfo.dwFileVersionLS));
 end;
 finally
FreeMem(Buf);
 end;
 except
Result := '-1';
 end;
end;

// 版本号比较{返回版本差 版本号格式:1.0.0.1}
function CompareVersion(VersionA, VersionB: string): string;
var
listA : TStringList;
listB : TStringList;
i : Integer;
strCompare : string;
begin
Result := '';
 // 创建
listA := TStringList.Create();
listB := TStringList.Create();
 // 获取列表
ExtractStrings(['.'], [' '], PChar(VersionA), listA);
ExtractStrings(['.'], [' '], PChar(VersionB), listB);
 if listA.Count <> listB.Count then
Exit;
 // 比较
 for i := 0 to listA.Count - 2 do
 begin
strCompare := strCompare + IntToStr(StrToInt(listA[i]) - StrToInt(listB[i])) + '.';
 end;
i := listA.Count - 1;
 if i < 0 then
Exit;
strCompare := strCompare + IntToStr(StrToInt(listA[i]) - StrToInt(listB[i]));
 // 释放
 if Assigned(listA) then
FreeAndNil(listA);
 if Assigned(listB) then
FreeAndNil(listB);
Result := strCompare;
end;

// 版本号转换为整数(和计算方式)
function VersionSumToInt(Version: string): Integer;
var
list : TStringList;
i : Integer;
nSum : Integer;
begin
Result := -1;
nSum := 0;
list := TStringList.Create();
ExtractStrings(['.'], [' '], PChar(Version), list);
 for i := 0 to list.Count - 1 do
 begin
 if StrToIntDef(list[i], -1) < 0 then
Exit;
nSum := nSum + StrToInt(list[i]);
 end;
 if Assigned(list) then
FreeAndNil(list);
Result := nSum;
end;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值