Delphi自动获取软件版本信息的类

来源:互联网 发布:伙伴云表格mac版下载 编辑:程序博客网 时间:2024/06/04 20:11
  1. unit untVersion;
  2. {-------------------------------------------------------------------------------
  3. *Description:自动获取应用程序的版本信息
  4. *Create by:   Derry Zhang
  5. *Create on:   2008-11-26
  6. -------------------------------------------------------------------------------}
  7. interface
  8. uses
  9.   Windows, Forms, SysUtils;
  10. type
  11.   TVersion = class(TObject)
  12.   private
  13.     FCompanyName: string;
  14.     FFileDescription: string;
  15.     FFileVersion: string;
  16.     FInternalName: string;
  17.     FLegalCopyright: string;
  18.     FLegalTradeMarks: string;
  19.     FOriginalFileName: string;
  20.     FProductName: string;
  21.     FProductVersion: string;
  22.     procedure GetCodeVersion;
  23.   public
  24.     constructor Create;
  25.     property CompanyName: string read FCompanyName;
  26.     property FileDescription: string read FFileDescription;
  27.     property FileVersion: string read FFileVersion;
  28.     property InternalName: string read FInternalName;
  29.     property LegalCopyright: string read FLegalCopyright;
  30.     property LegalTradeMarks: string read FLegalTradeMarks;
  31.     property OriginalFileName: string read FOriginalFileName;
  32.     property ProductName: string read FProductName;
  33.     property ProductVersion: string read FProductVersion;
  34.   end;
  35. implementation
  36. constructor TVersion.Create;
  37. begin
  38.   GetCodeVersion;
  39.   inherited;
  40. end;
  41. procedure TVersion.GetCodeVersion;
  42. const
  43.   InfoNum = 9;
  44.   InfoStr: array[1..InfoNum] of string = (
  45.     'ProductName',
  46.     'ProductVersion',
  47.     'FileDescription',
  48.     'LegalCopyright',
  49.     'FileVersion',
  50.     'CompanyName',
  51.     'LegalTradeMarks',
  52.     'InternalName',
  53.     'OriginalFileName'
  54.   );
  55. var
  56.   S: string;
  57.   BufSize, Len: DWORD;
  58.   Buf: PChar;
  59.   Value: PChar;
  60. begin
  61.   S := Application.ExeName;
  62.   BufSize := GetFileVersionInfoSize(PChar(S), BufSize);
  63.   if BufSize > 0 then begin
  64.     Buf := AllocMem(BufSize);
  65.     GetFileVersionInfo(PChar(S), 0, BufSize, Buf);
  66.     //产品名称
  67.     if VerQueryValue(Buf, PChar('StringFileInfo/080403A8/' + InfoStr[1]), Pointer(Value), Len) then
  68.     FProductName := Value;
  69.     //产品版本
  70.     if VerQueryValue(Buf, PChar('StringFileInfo/080403A8/' + InfoStr[2]), Pointer(Value), Len) then
  71.     FProductVersion := Value;
  72.     //文件描述
  73.     if VerQueryValue(Buf, PChar('StringFileInfo/080403A8/' + InfoStr[3]), Pointer(Value), Len) then
  74.     FFileDescription := Value;
  75.     //合法商标
  76.     if VerQueryValue(Buf, PChar('StringFileInfo/080403A8/' + InfoStr[4]), Pointer(Value), Len) then
  77.     FLegalCopyright := Value;
  78.     //文件版本-“关于”对话框中版本栏应该使用
  79.     if VerQueryValue(Buf, PChar('StringFileInfo/080403A8/' + InfoStr[5]), Pointer(Value), Len) then
  80.     FFileVersion := Value;
  81.     //公司名称
  82.     if VerQueryValue(Buf, PChar('StringFileInfo/080403A8/' + InfoStr[6]), Pointer(Value), Len) then
  83.     FCompanyName := Value;
  84.     //合法商标
  85.     if VerQueryValue(Buf, PChar('StringFileInfo/080403A8/' + InfoStr[7]), Pointer(Value), Len) then
  86.     FLegalTrademarks := Value;
  87.     //内部名称
  88.     if VerQueryValue(Buf, PChar('StringFileInfo/080403A8/' + InfoStr[8]), Pointer(Value), Len) then
  89.     FInternalName := Value;
  90.     //原文件名
  91.     if VerQueryValue(Buf, PChar('StringFileInfo/080403A8/' + InfoStr[9]), Pointer(Value), Len) then
  92.     FOriginalFilename := Value;
  93.     FreeMem(Buf, BufSize);
  94.     //OperatingSystem.Caption := GetOSVerInfo;
  95.     //SystemMemory.Caption := GetMemStat;
  96.   end
  97.   else
  98.   begin
  99.     Application.MessageBox('获取产品信息时遇到致命错误,请尝试重新启动软件。'+ #13 + '若仍未能解决问题,请联系产品服务人员。','错误',MB_OK + MB_ICONSTOP);
  100.   end;
  101. end;
原创粉丝点击