代码片段

USES IdGlobal,IdHash;

function GetMd5Str(ContenStr:string):string;
var
  RegMd5:TIdHashMessageDigest5;
  RegDigest:T4x4LongWordRecord;
begin
  RegMd5:=TIdHashMessageDigest5.Create;
  RegDigest:=RegMd5.HashValue(ContenStr);
  Result:=LowerCase(RegMd5.AsHex(RegDigest));
end;


function GetAppVersion:String;
 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;
begin
  Result:=GetFileVersion(Application.ExeName);
end;

// 获取版本号
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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值