-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrpVersionInfo.pas
158 lines (129 loc) · 4.83 KB
/
rpVersionInfo.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
unit rpVersionInfo; // by Rick Peterson [email protected]
interface
uses
Windows,
SysUtils,
Classes,
TypInfo;
type
{$M+}
TVersionType = (vtCompanyName, vtFileDescription, vtFileVersion, vtInternalName, vtLegalCopyright,
vtLegalTradeMark, vtOriginalFileName, vtProductName, vtProductVersion, vtComments);
{$M-}
TrpVersionInfo = class(TComponent)
private
FVersionInfo: array [0 .. ord(high(TVersionType))] of string;
protected
function GetCompanyName: string;
function GetFileDescription: string;
function GetFileVersion: string;
function GetInternalName: string;
function GetLegalCopyright: string;
function GetLegalTradeMark: string;
function GetOriginalFileName: string;
function GetProductName: string;
function GetProductVersion: string;
function GetComments: string;
function GetVersionInfo(VersionType: TVersionType): string; virtual;
procedure SetVersionInfo; virtual;
public
constructor Create(AOwner: TComponent); override;
published
property CompanyName: string
read GetCompanyName;
property FileDescription: string
read GetFileDescription;
property FileVersion: string
read GetFileVersion;
property InternalName: string
read GetInternalName;
property LegalCopyright: string
read GetLegalCopyright;
property LegalTradeMark: string
read GetLegalTradeMark;
property OriginalFileName: string
read GetOriginalFileName;
property ProductName: string
read GetProductName;
property ProductVersion: string
read GetProductVersion;
property Comments: string
read GetComments;
end;
procedure Register;
implementation
constructor TrpVersionInfo.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
SetVersionInfo;
end;
function TrpVersionInfo.GetCompanyName: string;
begin
result := GetVersionInfo(vtCompanyName);
end;
function TrpVersionInfo.GetFileDescription: string;
begin
result := GetVersionInfo(vtFileDescription);
end;
function TrpVersionInfo.GetFileVersion: string;
begin
result := GetVersionInfo(vtFileVersion);
end;
function TrpVersionInfo.GetInternalName: string;
begin
result := GetVersionInfo(vtInternalName);
end;
function TrpVersionInfo.GetLegalCopyright: string;
begin
result := GetVersionInfo(vtLegalCopyright);
end;
function TrpVersionInfo.GetLegalTradeMark: string;
begin
result := GetVersionInfo(vtLegalTradeMark);
end;
function TrpVersionInfo.GetOriginalFileName: string;
begin
result := GetVersionInfo(vtOriginalFileName);
end;
function TrpVersionInfo.GetProductName: string;
begin
result := GetVersionInfo(vtProductName);
end;
function TrpVersionInfo.GetProductVersion: string;
begin
result := GetVersionInfo(vtProductVersion);
end;
function TrpVersionInfo.GetComments: string;
begin
result := GetVersionInfo(vtComments);
end;
function TrpVersionInfo.GetVersionInfo(VersionType: TVersionType): string;
begin
result := FVersionInfo[ord(VersionType)];
end;
procedure TrpVersionInfo.SetVersionInfo;
var
sAppName, sVersionType: string;
iAppSize, iLenOfValue, i: Cardinal;
pcBuf, pcValue: PChar;
begin
sAppName := GetModuleName(hInstance);
iAppSize := GetFileVersionInfoSize(PChar(sAppName), iAppSize);
if iAppSize > 0 then begin
pcBuf := AllocMem(iAppSize);
GetFileVersionInfo(PChar(sAppName), 0, iAppSize, pcBuf);
for i := 0 to ord(High(TVersionType)) do begin
sVersionType := GetEnumName(TypeInfo(TVersionType), i);
sVersionType := Copy(sVersionType, 3, length(sVersionType));
if VerQueryValue(pcBuf, PChar('StringFileInfo\040904E4\' + sVersionType), Pointer(pcValue),
iLenOfValue) then
FVersionInfo[i] := pcValue;
end;
FreeMem(pcBuf, iAppSize);
end;
end;
procedure Register;
begin
RegisterComponents('FreeWare', [TrpVersionInfo]);
end;
end.