计算机二级辅导:Delphi自动获取软件版本信息的类
来源:优易学  2011-6-7 12:28:45   【优易学:中国教育考试门户网】   资料下载   IT书店
  unit untVersion;
  {----------------------------------
  *Description:自动获取应用程序的版本信息
  *Create by: Derry Zhang
  *Create on: 2008-11-26
  -----------------------------------}
  interface
  uses
  Windows, Forms, SysUtils;
  type
  TVersion = class(TObject)
  private
  FCompanyName: string;
  FFileDescription: string;
  FFileVersion: string;
  FInternalName: string;
  FLegalCopyright: string;
  FLegalTradeMarks: string;
  FOriginalFileName: string;
  FProductName: string;
  FProductVersion: string;
  procedure GetCodeVersion;
  public
  constructor Create;
  property CompanyName: string read FCompanyName;
  property FileDescription: string read FFileDescription;
  property FileVersion: string read FFileVersion;
  property InternalName: string read FInternalName;
  property LegalCopyright: string read FLegalCopyright;
  property LegalTradeMarks: string read FLegalTradeMarks;
  property OriginalFileName: string read FOriginalFileName;
  property ProductName: string read FProductName;
  property ProductVersion: string read FProductVersion;
  end;
  implementation
  constructor TVersion.Create;
  begin
  GetCodeVersion;
  inherited;
  end;
  procedure TVersion.GetCodeVersion;
  const
  InfoNum = 9;
  InfoStr: array[1..InfoNum] of string = (
  'ProductName',
  'ProductVersion',
  'FileDescription',
  'LegalCopyright',
  'FileVersion',
  'CompanyName',
  'LegalTradeMarks',
  'InternalName',
  'OriginalFileName'
  );
  var
  S: string;
  BufSize, Len: DWORD;
  Buf: PChar;
  Value: PChar;
  begin
  S := Application.ExeName;
  BufSize := GetFileVersionInfoSize(PChar(S), BufSize);
  if BufSize > 0 then begin
  Buf := AllocMem(BufSize);
  GetFileVersionInfo(PChar(S), 0, BufSize, Buf);
  //产品名称
  if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) then
  FProductName := Value;
  //产品版本
  if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then
  FProductVersion := Value;
  //文件描述
  if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then
  FFileDescription := Value;
  //合法商标
  if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then
  FLegalCopyright := Value;
  //文件版本-“关于”对话框中版本栏应该使用
  if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then
  FFileVersion := Value;
  //公司名称
  if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then
  FCompanyName := Value;
  //合法商标
  if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then
  FLegalTrademarks := Value;
  //内部名称
  if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then
  FInternalName := Value;
  //原文件名
  if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then
  FOriginalFilename := Value;
  FreeMem(Buf, BufSize);
  //OperatingSystem.Caption := GetOSVerInfo;
  //SystemMemory.Caption := GetMemStat;
  end
  else
  begin
  Application.MessageBox('获取产品信息时遇到致命错误,请尝试重新启动软件。'+ #13 + '若仍未能解决问题,请联系产品服务人员。','错误',MB_OK + MB_ICONSTOP);
  end;
  end;

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训