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;
责任编辑:cyth