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

代码片段

2016-03-29 17:22 169 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: