您的位置:首页 > 编程语言 > Delphi

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

2013-04-28 13:08 507 查看
// 获取版本号

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐