代码片段
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;
相关文章推荐
- c#命名规则和代码规则
- Azure 怎么开通FTP
- vs2010 c++ tagVARIANT 转换成 long
- OC与c混编实现Java的String的hashcode()函数
- zlib库内存压缩解压缩函数的C++便利性封装
- Aspectj切入点语法定义
- java中的异常
- c++忽略大小比较
- vs2010 c++ long转换成CString
- php+js字符串的拼接
- Spring IOC三种注入方式(接口注入、setter注入、构造器注入)
- python--爬虫入门(七)urllib库初体验以及中文编码问题的探讨
- 【spring】spring session的一些细节
- python基础
- vs2010 c++ 编辑框设置
- java版 仿qq代码 完整源码 (已测试)
- 分治——sqtx
- file:${user.dir}:spring读取工程外的properties文件
- attributesOfItemAtPath:方法的使用
- 我对java IO流简单的理解