DELPHI 获取版本号、格式化版本信息、比较版本号等相关操作

// 获取版本号   

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] ofchar;   

  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;  

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

 

以上获取版本号操作转自网上

view plaincopy to clipboardprint?

// 版本号比较{返回版本差  版本号格式: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;  

// 版本号比较{返回版本差 版本号格式: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;

 

view plaincopy to clipboardprint?

// 版本号转换为整数(和计算方式)   

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;  

posted @ 2013-04-28 13:08  小天1981  阅读(419)  评论(0编辑  收藏  举报