1
{******************************************************************************}
3
{ Windows Version API interface Unit for Object Pascal }
5
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
6
{ Corporation. All Rights Reserved. }
8
{ The original file is: winver.h, released June 2000. The original Pascal }
9
{ code is: WinVer.pas, released December 2000. The initial developer of the }
10
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
12
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
13
{ Marcel van Brakel. All Rights Reserved. }
15
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
17
{ You may retrieve the latest version of this file at the Project JEDI }
18
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
20
{ The contents of this file are used with permission, subject to the Mozilla }
21
{ Public License Version 1.1 (the "License"); you may not use this file except }
22
{ in compliance with the License. You may obtain a copy of the License at }
23
{ http://www.mozilla.org/MPL/MPL-1.1.html }
25
{ Software distributed under the License is distributed on an "AS IS" basis, }
26
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
27
{ the specific language governing rights and limitations under the License. }
29
{ Alternatively, the contents of this file may be used under the terms of the }
30
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
31
{ provisions of the LGPL License are applicable instead of those above. }
32
{ If you wish to allow use of your version of this file only under the terms }
33
{ of the LGPL License and not to allow others to use your version of this file }
34
{ under the MPL, indicate your decision by deleting the provisions above and }
35
{ replace them with the notice and other provisions required by the LGPL }
36
{ License. If you do not delete the provisions above, a recipient may use }
37
{ your version of this file under either the MPL or the LGPL License. }
39
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
41
{******************************************************************************}
43
// $Id: jwawinver.pas,v 1.1 2005/04/04 07:56:11 marco Exp $
50
{$HPPEMIT '#include "WinVer.h"'}
58
JwaWinUser, JwaWinType;
62
// RT_VERSION = MAKEINTRESOURCE(16);
64
// ----- Symbols -----
66
VS_FILE_INFO = RT_VERSION;
67
{$EXTERNALSYM VS_FILE_INFO}
69
{$EXTERNALSYM VS_VERSION_INFO}
70
VS_USER_DEFINED = 100;
71
{$EXTERNALSYM VS_USER_DEFINED}
73
// ----- VS_VERSION.dwFileFlags -----
75
VS_FFI_SIGNATURE = $FEEF04BD;
76
{$EXTERNALSYM VS_FFI_SIGNATURE}
77
VS_FFI_STRUCVERSION = $00010000;
78
{$EXTERNALSYM VS_FFI_STRUCVERSION}
79
VS_FFI_FILEFLAGSMASK = $0000003F;
80
{$EXTERNALSYM VS_FFI_FILEFLAGSMASK}
82
// ----- VS_VERSION.dwFileFlags -----
84
VS_FF_DEBUG = $00000001;
85
{$EXTERNALSYM VS_FF_DEBUG}
86
VS_FF_PRERELEASE = $00000002;
87
{$EXTERNALSYM VS_FF_PRERELEASE}
88
VS_FF_PATCHED = $00000004;
89
{$EXTERNALSYM VS_FF_PATCHED}
90
VS_FF_PRIVATEBUILD = $00000008;
91
{$EXTERNALSYM VS_FF_PRIVATEBUILD}
92
VS_FF_INFOINFERRED = $00000010;
93
{$EXTERNALSYM VS_FF_INFOINFERRED}
94
VS_FF_SPECIALBUILD = $00000020;
95
{$EXTERNALSYM VS_FF_SPECIALBUILD}
97
// ----- VS_VERSION.dwFileOS -----
99
VOS_UNKNOWN = $00000000;
100
{$EXTERNALSYM VOS_UNKNOWN}
102
{$EXTERNALSYM VOS_DOS}
103
VOS_OS216 = $00020000;
104
{$EXTERNALSYM VOS_OS216}
105
VOS_OS232 = $00030000;
106
{$EXTERNALSYM VOS_OS232}
108
{$EXTERNALSYM VOS_NT}
109
VOS_WINCE = $00050000;
110
{$EXTERNALSYM VOS_WINCE}
112
VOS__BASE = $00000000;
113
{$EXTERNALSYM VOS__BASE}
114
VOS__WINDOWS16 = $00000001;
115
{$EXTERNALSYM VOS__WINDOWS16}
116
VOS__PM16 = $00000002;
117
{$EXTERNALSYM VOS__PM16}
118
VOS__PM32 = $00000003;
119
{$EXTERNALSYM VOS__PM32}
120
VOS__WINDOWS32 = $00000004;
121
{$EXTERNALSYM VOS__WINDOWS32}
123
VOS_DOS_WINDOWS16 = $00010001;
124
{$EXTERNALSYM VOS_DOS_WINDOWS16}
125
VOS_DOS_WINDOWS32 = $00010004;
126
{$EXTERNALSYM VOS_DOS_WINDOWS32}
127
VOS_OS216_PM16 = $00020002;
128
{$EXTERNALSYM VOS_OS216_PM16}
129
VOS_OS232_PM32 = $00030003;
130
{$EXTERNALSYM VOS_OS232_PM32}
131
VOS_NT_WINDOWS32 = $00040004;
132
{$EXTERNALSYM VOS_NT_WINDOWS32}
134
// ----- VS_VERSION.dwFileType -----
136
VFT_UNKNOWN = $00000000;
137
{$EXTERNALSYM VFT_UNKNOWN}
139
{$EXTERNALSYM VFT_APP}
141
{$EXTERNALSYM VFT_DLL}
143
{$EXTERNALSYM VFT_DRV}
144
VFT_FONT = $00000004;
145
{$EXTERNALSYM VFT_FONT}
147
{$EXTERNALSYM VFT_VXD}
148
VFT_STATIC_LIB = $00000007;
149
{$EXTERNALSYM VFT_STATIC_LIB}
151
// ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV -----
153
VFT2_UNKNOWN = $00000000;
154
{$EXTERNALSYM VFT2_UNKNOWN}
155
VFT2_DRV_PRINTER = $00000001;
156
{$EXTERNALSYM VFT2_DRV_PRINTER}
157
VFT2_DRV_KEYBOARD = $00000002;
158
{$EXTERNALSYM VFT2_DRV_KEYBOARD}
159
VFT2_DRV_LANGUAGE = $00000003;
160
{$EXTERNALSYM VFT2_DRV_LANGUAGE}
161
VFT2_DRV_DISPLAY = $00000004;
162
{$EXTERNALSYM VFT2_DRV_DISPLAY}
163
VFT2_DRV_MOUSE = $00000005;
164
{$EXTERNALSYM VFT2_DRV_MOUSE}
165
VFT2_DRV_NETWORK = $00000006;
166
{$EXTERNALSYM VFT2_DRV_NETWORK}
167
VFT2_DRV_SYSTEM = $00000007;
168
{$EXTERNALSYM VFT2_DRV_SYSTEM}
169
VFT2_DRV_INSTALLABLE = $00000008;
170
{$EXTERNALSYM VFT2_DRV_INSTALLABLE}
171
VFT2_DRV_SOUND = $00000009;
172
{$EXTERNALSYM VFT2_DRV_SOUND}
173
VFT2_DRV_COMM = $0000000A;
174
{$EXTERNALSYM VFT2_DRV_COMM}
175
VFT2_DRV_INPUTMETHOD = $0000000B;
176
{$EXTERNALSYM VFT2_DRV_INPUTMETHOD}
177
VFT2_DRV_VERSIONED_PRINTER = $0000000C;
178
{$EXTERNALSYM VFT2_DRV_VERSIONED_PRINTER}
180
// ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT -----
182
VFT2_FONT_RASTER = $00000001;
183
{$EXTERNALSYM VFT2_FONT_RASTER}
184
VFT2_FONT_VECTOR = $00000002;
185
{$EXTERNALSYM VFT2_FONT_VECTOR}
186
VFT2_FONT_TRUETYPE = $00000003;
187
{$EXTERNALSYM VFT2_FONT_TRUETYPE}
189
// ----- VerFindFile() flags -----
191
VFFF_ISSHAREDFILE = $0001;
192
{$EXTERNALSYM VFFF_ISSHAREDFILE}
194
VFF_CURNEDEST = $0001;
195
{$EXTERNALSYM VFF_CURNEDEST}
196
VFF_FILEINUSE = $0002;
197
{$EXTERNALSYM VFF_FILEINUSE}
198
VFF_BUFFTOOSMALL = $0004;
199
{$EXTERNALSYM VFF_BUFFTOOSMALL}
201
// ----- VerInstallFile() flags -----
203
VIFF_FORCEINSTALL = $0001;
204
{$EXTERNALSYM VIFF_FORCEINSTALL}
205
VIFF_DONTDELETEOLD = $0002;
206
{$EXTERNALSYM VIFF_DONTDELETEOLD}
208
VIF_TEMPFILE = $00000001;
209
{$EXTERNALSYM VIF_TEMPFILE}
210
VIF_MISMATCH = $00000002;
211
{$EXTERNALSYM VIF_MISMATCH}
212
VIF_SRCOLD = $00000004;
213
{$EXTERNALSYM VIF_SRCOLD}
215
VIF_DIFFLANG = $00000008;
216
{$EXTERNALSYM VIF_DIFFLANG}
217
VIF_DIFFCODEPG = $00000010;
218
{$EXTERNALSYM VIF_DIFFCODEPG}
219
VIF_DIFFTYPE = $00000020;
220
{$EXTERNALSYM VIF_DIFFTYPE}
222
VIF_WRITEPROT = $00000040;
223
{$EXTERNALSYM VIF_WRITEPROT}
224
VIF_FILEINUSE = $00000080;
225
{$EXTERNALSYM VIF_FILEINUSE}
226
VIF_OUTOFSPACE = $00000100;
227
{$EXTERNALSYM VIF_OUTOFSPACE}
228
VIF_ACCESSVIOLATION = $00000200;
229
{$EXTERNALSYM VIF_ACCESSVIOLATION}
230
VIF_SHARINGVIOLATION = $00000400;
231
{$EXTERNALSYM VIF_SHARINGVIOLATION}
232
VIF_CANNOTCREATE = $00000800;
233
{$EXTERNALSYM VIF_CANNOTCREATE}
234
VIF_CANNOTDELETE = $00001000;
235
{$EXTERNALSYM VIF_CANNOTDELETE}
236
VIF_CANNOTRENAME = $00002000;
237
{$EXTERNALSYM VIF_CANNOTRENAME}
238
VIF_CANNOTDELETECUR = $00004000;
239
{$EXTERNALSYM VIF_CANNOTDELETECUR}
240
VIF_OUTOFMEMORY = $00008000;
241
{$EXTERNALSYM VIF_OUTOFMEMORY}
243
VIF_CANNOTREADSRC = $00010000;
244
{$EXTERNALSYM VIF_CANNOTREADSRC}
245
VIF_CANNOTREADDST = $00020000;
246
{$EXTERNALSYM VIF_CANNOTREADDST}
248
VIF_BUFFTOOSMALL = $00040000;
249
{$EXTERNALSYM VIF_BUFFTOOSMALL}
250
VIF_CANNOTLOADLZ32 = $00080000;
251
{$EXTERNALSYM VIF_CANNOTLOADLZ32}
252
VIF_CANNOTLOADCABINET = $00100000;
253
{$EXTERNALSYM VIF_CANNOTLOADCABINET}
255
// ----- Types and structures -----
258
PVSFixedFileInfo = ^VS_FIXEDFILEINFO;
259
tagVS_FIXEDFILEINFO = record
260
dwSignature: DWORD; // e.g. 0xfeef04bd
261
dwStrucVersion: DWORD; // e.g. 0x00000042 = "0.42"
262
dwFileVersionMS: DWORD; // e.g. 0x00030075 = "3.75"
263
dwFileVersionLS: DWORD; // e.g. 0x00000031 = "0.31"
264
dwProductVersionMS: DWORD; // e.g. 0x00030010 = "3.10"
265
dwProductVersionLS: DWORD; // e.g. 0x00000031 = "0.31"
266
dwFileFlagsMask: DWORD; // = 0x3F for version "0.42"
267
dwFileFlags: DWORD; // e.g. VFF_DEBUG | VFF_PRERELEASE
268
dwFileOS: DWORD; // e.g. VOS_DOS_WINDOWS16
269
dwFileType: DWORD; // e.g. VFT_DRIVER
270
dwFileSubtype: DWORD; // e.g. VFT2_DRV_KEYBOARD
271
dwFileDateMS: DWORD; // e.g. 0
272
dwFileDateLS: DWORD; // e.g. 0
274
{$EXTERNALSYM tagVS_FIXEDFILEINFO}
275
VS_FIXEDFILEINFO = tagVS_FIXEDFILEINFO;
276
{$EXTERNALSYM VS_FIXEDFILEINFO}
277
TVSFixedFileInfo = VS_FIXEDFILEINFO;
279
// ----- Function prototypes -----
281
function VerFindFileA(uFlags: DWORD; szFileName, szWinDir, szAppDir,
282
szCurDir: LPSTR; var lpuCurDirLen: UINT; szDestDir: LPSTR;
283
var lpuDestDirLen: UINT): DWORD; stdcall;
284
{$EXTERNALSYM VerFindFileA}
285
function VerFindFileW(uFlags: DWORD; szFileName, szWinDir, szAppDir,
286
szCurDir: LPWSTR; var lpuCurDirLen: UINT; szDestDir: LPWSTR;
287
var lpuDestDirLen: UINT): DWORD; stdcall;
288
{$EXTERNALSYM VerFindFileW}
289
function VerFindFile(uFlags: DWORD; szFileName, szWinDir, szAppDir,
290
szCurDir: LPTSTR; var lpuCurDirLen: UINT; szDestDir: LPTSTR;
291
var lpuDestDirLen: UINT): DWORD; stdcall;
292
{$EXTERNALSYM VerFindFile}
294
function VerInstallFileA(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
295
szDestDir, szCurDir, szTmpFile: LPSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
296
{$EXTERNALSYM VerInstallFileA}
297
function VerInstallFileW(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
298
szDestDir, szCurDir, szTmpFile: LPWSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
299
{$EXTERNALSYM VerInstallFileW}
300
function VerInstallFile(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
301
szDestDir, szCurDir, szTmpFile: LPTSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
302
{$EXTERNALSYM VerInstallFile}
304
// Returns size of version info in bytes
306
function GetFileVersionInfoSizeA(lptstrFilename: LPCSTR; var lpdwHandle: DWORD): DWORD; stdcall;
307
{$EXTERNALSYM GetFileVersionInfoSizeA}
308
function GetFileVersionInfoSizeW(lptstrFilename: LPCWSTR; var lpdwHandle: DWORD): DWORD; stdcall;
309
{$EXTERNALSYM GetFileVersionInfoSizeW}
310
function GetFileVersionInfoSize(lptstrFilename: LPCTSTR; var lpdwHandle: DWORD): DWORD; stdcall;
311
{$EXTERNALSYM GetFileVersionInfoSize}
313
// Read version info into buffer
315
function GetFileVersionInfoA(lptstrFilename: LPCSTR; dwHandle, dwLen: DWORD;
316
lpData: LPVOID): BOOL; stdcall;
317
{$EXTERNALSYM GetFileVersionInfoA}
318
function GetFileVersionInfoW(lptstrFilename: LPCWSTR; dwHandle, dwLen: DWORD;
319
lpData: LPVOID): BOOL; stdcall;
320
{$EXTERNALSYM GetFileVersionInfoW}
321
function GetFileVersionInfo(lptstrFilename: LPCTSTR; dwHandle, dwLen: DWORD;
322
lpData: LPVOID): BOOL; stdcall;
323
{$EXTERNALSYM GetFileVersionInfo}
325
function VerLanguageNameA(wLang: DWORD; szLang: LPSTR; nSize: DWORD): DWORD; stdcall;
326
{$EXTERNALSYM VerLanguageNameA}
327
function VerLanguageNameW(wLang: DWORD; szLang: LPWSTR; nSize: DWORD): DWORD; stdcall;
328
{$EXTERNALSYM VerLanguageNameW}
329
function VerLanguageName(wLang: DWORD; szLang: LPTSTR; nSize: DWORD): DWORD; stdcall;
330
{$EXTERNALSYM VerLanguageName}
332
function VerQueryValueA(pBlock: LPVOID; lpSubBlock: LPSTR; var lplpBuffer: LPVOID;
333
var puLen: UINT): BOOL; stdcall;
334
{$EXTERNALSYM VerQueryValueA}
335
function VerQueryValueW(pBlock: LPVOID; lpSubBlock: LPWSTR; var lplpBuffer: LPVOID;
336
var puLen: UINT): BOOL; stdcall;
337
{$EXTERNALSYM VerQueryValueW}
338
function VerQueryValue(pBlock: LPVOID; lpSubBlock: LPTSTR; var lplpBuffer: LPVOID;
339
var puLen: UINT): BOOL; stdcall;
340
{$EXTERNALSYM VerQueryValue}
345
Version = 'version.dll';
352
{$IFDEF DYNAMIC_LINK}
355
_VerFindFileA: Pointer;
357
function VerFindFileA;
359
GetProcedureAddress(_VerFindFileA, Version, 'VerFindFileA');
368
_VerFindFileW: Pointer;
370
function VerFindFileW;
372
GetProcedureAddress(_VerFindFileW, Version, 'VerFindFileW');
381
_VerFindFile: Pointer;
383
function VerFindFile;
385
GetProcedureAddress(_VerFindFile, Version, 'VerFindFile' + AWSuffix);
394
_VerInstallFileA: Pointer;
396
function VerInstallFileA;
398
GetProcedureAddress(_VerInstallFileA, Version, 'VerInstallFileA');
402
JMP [_VerInstallFileA]
407
_VerInstallFileW: Pointer;
409
function VerInstallFileW;
411
GetProcedureAddress(_VerInstallFileW, Version, 'VerInstallFileW');
415
JMP [_VerInstallFileW]
420
_VerInstallFile: Pointer;
422
function VerInstallFile;
424
GetProcedureAddress(_VerInstallFile, Version, 'VerInstallFile' + AWSuffix);
428
JMP [_VerInstallFile]
433
_GetFileVersionInfoSizeA: Pointer;
435
function GetFileVersionInfoSizeA;
437
GetProcedureAddress(_GetFileVersionInfoSizeA, Version, 'GetFileVersionInfoSizeA');
441
JMP [_GetFileVersionInfoSizeA]
446
_GetFileVersionInfoSizeW: Pointer;
448
function GetFileVersionInfoSizeW;
450
GetProcedureAddress(_GetFileVersionInfoSizeW, Version, 'GetFileVersionInfoSizeW');
454
JMP [_GetFileVersionInfoSizeW]
459
_GetFileVersionInfoSize: Pointer;
461
function GetFileVersionInfoSize;
463
GetProcedureAddress(_GetFileVersionInfoSize, Version, 'GetFileVersionInfoSize' + AWSuffix);
467
JMP [_GetFileVersionInfoSize]
472
_GetFileVersionInfoA: Pointer;
474
function GetFileVersionInfoA;
476
GetProcedureAddress(_GetFileVersionInfoA, Version, 'GetFileVersionInfoA');
480
JMP [_GetFileVersionInfoA]
485
_GetFileVersionInfoW: Pointer;
487
function GetFileVersionInfoW;
489
GetProcedureAddress(_GetFileVersionInfoW, Version, 'GetFileVersionInfoW');
493
JMP [_GetFileVersionInfoW]
498
_GetFileVersionInfo: Pointer;
500
function GetFileVersionInfo;
502
GetProcedureAddress(_GetFileVersionInfo, Version, 'GetFileVersionInfo' + AWSuffix);
506
JMP [_GetFileVersionInfo]
511
_VerLanguageNameA: Pointer;
513
function VerLanguageNameA;
515
GetProcedureAddress(_VerLanguageNameA, Version, 'VerLanguageNameA');
519
JMP [_VerLanguageNameA]
524
_VerLanguageNameW: Pointer;
526
function VerLanguageNameW;
528
GetProcedureAddress(_VerLanguageNameW, Version, 'VerLanguageNameW');
532
JMP [_VerLanguageNameW]
537
_VerLanguageName: Pointer;
539
function VerLanguageName;
541
GetProcedureAddress(_VerLanguageName, Version, 'VerLanguageName' + AWSuffix);
545
JMP [_VerLanguageName]
550
_VerQueryValueA: Pointer;
552
function VerQueryValueA;
554
GetProcedureAddress(_VerQueryValueA, Version, 'VerQueryValueA');
558
JMP [_VerQueryValueA]
563
_VerQueryValueW: Pointer;
565
function VerQueryValueW;
567
GetProcedureAddress(_VerQueryValueW, Version, 'VerQueryValueW');
571
JMP [_VerQueryValueW]
576
_VerQueryValue: Pointer;
578
function VerQueryValue;
580
GetProcedureAddress(_VerQueryValue, Version, 'VerQueryValue' + AWSuffix);
590
function VerFindFileA; external Version name 'VerFindFileA';
591
function VerFindFileW; external Version name 'VerFindFileW';
592
function VerFindFile; external Version name 'VerFindFile' + AWSuffix;
593
function VerInstallFileA; external Version name 'VerInstallFileA';
594
function VerInstallFileW; external Version name 'VerInstallFileW';
595
function VerInstallFile; external Version name 'VerInstallFile' + AWSuffix;
596
function GetFileVersionInfoSizeA; external Version name 'GetFileVersionInfoSizeA';
597
function GetFileVersionInfoSizeW; external Version name 'GetFileVersionInfoSizeW';
598
function GetFileVersionInfoSize; external Version name 'GetFileVersionInfoSize' + AWSuffix;
599
function GetFileVersionInfoA; external Version name 'GetFileVersionInfoA';
600
function GetFileVersionInfoW; external Version name 'GetFileVersionInfoW';
601
function GetFileVersionInfo; external Version name 'GetFileVersionInfo' + AWSuffix;
602
function VerLanguageNameA; external Version name 'VerLanguageNameA';
603
function VerLanguageNameW; external Version name 'VerLanguageNameW';
604
function VerLanguageName; external Version name 'VerLanguageName' + AWSuffix;
605
function VerQueryValueA; external Version name 'VerQueryValueA';
606
function VerQueryValueW; external Version name 'VerQueryValueW';
607
function VerQueryValue; external Version name 'VerQueryValue' + AWSuffix;
609
{$ENDIF DYNAMIC_LINK}
1
{******************************************************************************}
3
{ Windows Version API interface Unit for Object Pascal }
5
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
6
{ Corporation. All Rights Reserved. }
8
{ The original file is: winver.h, released June 2000. The original Pascal }
9
{ code is: WinVer.pas, released December 2000. The initial developer of the }
10
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
12
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
13
{ Marcel van Brakel. All Rights Reserved. }
15
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
17
{ You may retrieve the latest version of this file at the Project JEDI }
18
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
20
{ The contents of this file are used with permission, subject to the Mozilla }
21
{ Public License Version 1.1 (the "License"); you may not use this file except }
22
{ in compliance with the License. You may obtain a copy of the License at }
23
{ http://www.mozilla.org/MPL/MPL-1.1.html }
25
{ Software distributed under the License is distributed on an "AS IS" basis, }
26
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
27
{ the specific language governing rights and limitations under the License. }
29
{ Alternatively, the contents of this file may be used under the terms of the }
30
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
31
{ provisions of the LGPL License are applicable instead of those above. }
32
{ If you wish to allow use of your version of this file only under the terms }
33
{ of the LGPL License and not to allow others to use your version of this file }
34
{ under the MPL, indicate your decision by deleting the provisions above and }
35
{ replace them with the notice and other provisions required by the LGPL }
36
{ License. If you do not delete the provisions above, a recipient may use }
37
{ your version of this file under either the MPL or the LGPL License. }
39
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
41
{******************************************************************************}
49
{$HPPEMIT '#include "WinVer.h"'}
57
JwaWinUser, JwaWinType;
61
// RT_VERSION = MAKEINTRESOURCE(16);
63
// ----- Symbols -----
65
VS_FILE_INFO = RT_VERSION;
66
{$EXTERNALSYM VS_FILE_INFO}
68
{$EXTERNALSYM VS_VERSION_INFO}
69
VS_USER_DEFINED = 100;
70
{$EXTERNALSYM VS_USER_DEFINED}
72
// ----- VS_VERSION.dwFileFlags -----
74
VS_FFI_SIGNATURE = $FEEF04BD;
75
{$EXTERNALSYM VS_FFI_SIGNATURE}
76
VS_FFI_STRUCVERSION = $00010000;
77
{$EXTERNALSYM VS_FFI_STRUCVERSION}
78
VS_FFI_FILEFLAGSMASK = $0000003F;
79
{$EXTERNALSYM VS_FFI_FILEFLAGSMASK}
81
// ----- VS_VERSION.dwFileFlags -----
83
VS_FF_DEBUG = $00000001;
84
{$EXTERNALSYM VS_FF_DEBUG}
85
VS_FF_PRERELEASE = $00000002;
86
{$EXTERNALSYM VS_FF_PRERELEASE}
87
VS_FF_PATCHED = $00000004;
88
{$EXTERNALSYM VS_FF_PATCHED}
89
VS_FF_PRIVATEBUILD = $00000008;
90
{$EXTERNALSYM VS_FF_PRIVATEBUILD}
91
VS_FF_INFOINFERRED = $00000010;
92
{$EXTERNALSYM VS_FF_INFOINFERRED}
93
VS_FF_SPECIALBUILD = $00000020;
94
{$EXTERNALSYM VS_FF_SPECIALBUILD}
96
// ----- VS_VERSION.dwFileOS -----
98
VOS_UNKNOWN = $00000000;
99
{$EXTERNALSYM VOS_UNKNOWN}
101
{$EXTERNALSYM VOS_DOS}
102
VOS_OS216 = $00020000;
103
{$EXTERNALSYM VOS_OS216}
104
VOS_OS232 = $00030000;
105
{$EXTERNALSYM VOS_OS232}
107
{$EXTERNALSYM VOS_NT}
108
VOS_WINCE = $00050000;
109
{$EXTERNALSYM VOS_WINCE}
111
VOS__BASE = $00000000;
112
{$EXTERNALSYM VOS__BASE}
113
VOS__WINDOWS16 = $00000001;
114
{$EXTERNALSYM VOS__WINDOWS16}
115
VOS__PM16 = $00000002;
116
{$EXTERNALSYM VOS__PM16}
117
VOS__PM32 = $00000003;
118
{$EXTERNALSYM VOS__PM32}
119
VOS__WINDOWS32 = $00000004;
120
{$EXTERNALSYM VOS__WINDOWS32}
122
VOS_DOS_WINDOWS16 = $00010001;
123
{$EXTERNALSYM VOS_DOS_WINDOWS16}
124
VOS_DOS_WINDOWS32 = $00010004;
125
{$EXTERNALSYM VOS_DOS_WINDOWS32}
126
VOS_OS216_PM16 = $00020002;
127
{$EXTERNALSYM VOS_OS216_PM16}
128
VOS_OS232_PM32 = $00030003;
129
{$EXTERNALSYM VOS_OS232_PM32}
130
VOS_NT_WINDOWS32 = $00040004;
131
{$EXTERNALSYM VOS_NT_WINDOWS32}
133
// ----- VS_VERSION.dwFileType -----
135
VFT_UNKNOWN = $00000000;
136
{$EXTERNALSYM VFT_UNKNOWN}
138
{$EXTERNALSYM VFT_APP}
140
{$EXTERNALSYM VFT_DLL}
142
{$EXTERNALSYM VFT_DRV}
143
VFT_FONT = $00000004;
144
{$EXTERNALSYM VFT_FONT}
146
{$EXTERNALSYM VFT_VXD}
147
VFT_STATIC_LIB = $00000007;
148
{$EXTERNALSYM VFT_STATIC_LIB}
150
// ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV -----
152
VFT2_UNKNOWN = $00000000;
153
{$EXTERNALSYM VFT2_UNKNOWN}
154
VFT2_DRV_PRINTER = $00000001;
155
{$EXTERNALSYM VFT2_DRV_PRINTER}
156
VFT2_DRV_KEYBOARD = $00000002;
157
{$EXTERNALSYM VFT2_DRV_KEYBOARD}
158
VFT2_DRV_LANGUAGE = $00000003;
159
{$EXTERNALSYM VFT2_DRV_LANGUAGE}
160
VFT2_DRV_DISPLAY = $00000004;
161
{$EXTERNALSYM VFT2_DRV_DISPLAY}
162
VFT2_DRV_MOUSE = $00000005;
163
{$EXTERNALSYM VFT2_DRV_MOUSE}
164
VFT2_DRV_NETWORK = $00000006;
165
{$EXTERNALSYM VFT2_DRV_NETWORK}
166
VFT2_DRV_SYSTEM = $00000007;
167
{$EXTERNALSYM VFT2_DRV_SYSTEM}
168
VFT2_DRV_INSTALLABLE = $00000008;
169
{$EXTERNALSYM VFT2_DRV_INSTALLABLE}
170
VFT2_DRV_SOUND = $00000009;
171
{$EXTERNALSYM VFT2_DRV_SOUND}
172
VFT2_DRV_COMM = $0000000A;
173
{$EXTERNALSYM VFT2_DRV_COMM}
174
VFT2_DRV_INPUTMETHOD = $0000000B;
175
{$EXTERNALSYM VFT2_DRV_INPUTMETHOD}
176
VFT2_DRV_VERSIONED_PRINTER = $0000000C;
177
{$EXTERNALSYM VFT2_DRV_VERSIONED_PRINTER}
179
// ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT -----
181
VFT2_FONT_RASTER = $00000001;
182
{$EXTERNALSYM VFT2_FONT_RASTER}
183
VFT2_FONT_VECTOR = $00000002;
184
{$EXTERNALSYM VFT2_FONT_VECTOR}
185
VFT2_FONT_TRUETYPE = $00000003;
186
{$EXTERNALSYM VFT2_FONT_TRUETYPE}
188
// ----- VerFindFile() flags -----
190
VFFF_ISSHAREDFILE = $0001;
191
{$EXTERNALSYM VFFF_ISSHAREDFILE}
193
VFF_CURNEDEST = $0001;
194
{$EXTERNALSYM VFF_CURNEDEST}
195
VFF_FILEINUSE = $0002;
196
{$EXTERNALSYM VFF_FILEINUSE}
197
VFF_BUFFTOOSMALL = $0004;
198
{$EXTERNALSYM VFF_BUFFTOOSMALL}
200
// ----- VerInstallFile() flags -----
202
VIFF_FORCEINSTALL = $0001;
203
{$EXTERNALSYM VIFF_FORCEINSTALL}
204
VIFF_DONTDELETEOLD = $0002;
205
{$EXTERNALSYM VIFF_DONTDELETEOLD}
207
VIF_TEMPFILE = $00000001;
208
{$EXTERNALSYM VIF_TEMPFILE}
209
VIF_MISMATCH = $00000002;
210
{$EXTERNALSYM VIF_MISMATCH}
211
VIF_SRCOLD = $00000004;
212
{$EXTERNALSYM VIF_SRCOLD}
214
VIF_DIFFLANG = $00000008;
215
{$EXTERNALSYM VIF_DIFFLANG}
216
VIF_DIFFCODEPG = $00000010;
217
{$EXTERNALSYM VIF_DIFFCODEPG}
218
VIF_DIFFTYPE = $00000020;
219
{$EXTERNALSYM VIF_DIFFTYPE}
221
VIF_WRITEPROT = $00000040;
222
{$EXTERNALSYM VIF_WRITEPROT}
223
VIF_FILEINUSE = $00000080;
224
{$EXTERNALSYM VIF_FILEINUSE}
225
VIF_OUTOFSPACE = $00000100;
226
{$EXTERNALSYM VIF_OUTOFSPACE}
227
VIF_ACCESSVIOLATION = $00000200;
228
{$EXTERNALSYM VIF_ACCESSVIOLATION}
229
VIF_SHARINGVIOLATION = $00000400;
230
{$EXTERNALSYM VIF_SHARINGVIOLATION}
231
VIF_CANNOTCREATE = $00000800;
232
{$EXTERNALSYM VIF_CANNOTCREATE}
233
VIF_CANNOTDELETE = $00001000;
234
{$EXTERNALSYM VIF_CANNOTDELETE}
235
VIF_CANNOTRENAME = $00002000;
236
{$EXTERNALSYM VIF_CANNOTRENAME}
237
VIF_CANNOTDELETECUR = $00004000;
238
{$EXTERNALSYM VIF_CANNOTDELETECUR}
239
VIF_OUTOFMEMORY = $00008000;
240
{$EXTERNALSYM VIF_OUTOFMEMORY}
242
VIF_CANNOTREADSRC = $00010000;
243
{$EXTERNALSYM VIF_CANNOTREADSRC}
244
VIF_CANNOTREADDST = $00020000;
245
{$EXTERNALSYM VIF_CANNOTREADDST}
247
VIF_BUFFTOOSMALL = $00040000;
248
{$EXTERNALSYM VIF_BUFFTOOSMALL}
249
VIF_CANNOTLOADLZ32 = $00080000;
250
{$EXTERNALSYM VIF_CANNOTLOADLZ32}
251
VIF_CANNOTLOADCABINET = $00100000;
252
{$EXTERNALSYM VIF_CANNOTLOADCABINET}
254
// ----- Types and structures -----
257
PVSFixedFileInfo = ^VS_FIXEDFILEINFO;
258
tagVS_FIXEDFILEINFO = record
259
dwSignature: DWORD; // e.g. 0xfeef04bd
260
dwStrucVersion: DWORD; // e.g. 0x00000042 = "0.42"
261
dwFileVersionMS: DWORD; // e.g. 0x00030075 = "3.75"
262
dwFileVersionLS: DWORD; // e.g. 0x00000031 = "0.31"
263
dwProductVersionMS: DWORD; // e.g. 0x00030010 = "3.10"
264
dwProductVersionLS: DWORD; // e.g. 0x00000031 = "0.31"
265
dwFileFlagsMask: DWORD; // = 0x3F for version "0.42"
266
dwFileFlags: DWORD; // e.g. VFF_DEBUG | VFF_PRERELEASE
267
dwFileOS: DWORD; // e.g. VOS_DOS_WINDOWS16
268
dwFileType: DWORD; // e.g. VFT_DRIVER
269
dwFileSubtype: DWORD; // e.g. VFT2_DRV_KEYBOARD
270
dwFileDateMS: DWORD; // e.g. 0
271
dwFileDateLS: DWORD; // e.g. 0
273
{$EXTERNALSYM tagVS_FIXEDFILEINFO}
274
VS_FIXEDFILEINFO = tagVS_FIXEDFILEINFO;
275
{$EXTERNALSYM VS_FIXEDFILEINFO}
276
TVSFixedFileInfo = VS_FIXEDFILEINFO;
278
// ----- Function prototypes -----
280
function VerFindFileA(uFlags: DWORD; szFileName, szWinDir, szAppDir,
281
szCurDir: LPSTR; var lpuCurDirLen: UINT; szDestDir: LPSTR;
282
var lpuDestDirLen: UINT): DWORD; stdcall;
283
{$EXTERNALSYM VerFindFileA}
284
function VerFindFileW(uFlags: DWORD; szFileName, szWinDir, szAppDir,
285
szCurDir: LPWSTR; var lpuCurDirLen: UINT; szDestDir: LPWSTR;
286
var lpuDestDirLen: UINT): DWORD; stdcall;
287
{$EXTERNALSYM VerFindFileW}
288
function VerFindFile(uFlags: DWORD; szFileName, szWinDir, szAppDir,
289
szCurDir: LPTSTR; var lpuCurDirLen: UINT; szDestDir: LPTSTR;
290
var lpuDestDirLen: UINT): DWORD; stdcall;
291
{$EXTERNALSYM VerFindFile}
293
function VerInstallFileA(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
294
szDestDir, szCurDir, szTmpFile: LPSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
295
{$EXTERNALSYM VerInstallFileA}
296
function VerInstallFileW(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
297
szDestDir, szCurDir, szTmpFile: LPWSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
298
{$EXTERNALSYM VerInstallFileW}
299
function VerInstallFile(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
300
szDestDir, szCurDir, szTmpFile: LPTSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
301
{$EXTERNALSYM VerInstallFile}
303
// Returns size of version info in bytes
305
function GetFileVersionInfoSizeA(lptstrFilename: LPCSTR; var lpdwHandle: DWORD): DWORD; stdcall;
306
{$EXTERNALSYM GetFileVersionInfoSizeA}
307
function GetFileVersionInfoSizeW(lptstrFilename: LPCWSTR; var lpdwHandle: DWORD): DWORD; stdcall;
308
{$EXTERNALSYM GetFileVersionInfoSizeW}
309
function GetFileVersionInfoSize(lptstrFilename: LPCTSTR; var lpdwHandle: DWORD): DWORD; stdcall;
310
{$EXTERNALSYM GetFileVersionInfoSize}
312
// Read version info into buffer
314
function GetFileVersionInfoA(lptstrFilename: LPCSTR; dwHandle, dwLen: DWORD;
315
lpData: LPVOID): BOOL; stdcall;
316
{$EXTERNALSYM GetFileVersionInfoA}
317
function GetFileVersionInfoW(lptstrFilename: LPCWSTR; dwHandle, dwLen: DWORD;
318
lpData: LPVOID): BOOL; stdcall;
319
{$EXTERNALSYM GetFileVersionInfoW}
320
function GetFileVersionInfo(lptstrFilename: LPCTSTR; dwHandle, dwLen: DWORD;
321
lpData: LPVOID): BOOL; stdcall;
322
{$EXTERNALSYM GetFileVersionInfo}
324
function VerLanguageNameA(wLang: DWORD; szLang: LPSTR; nSize: DWORD): DWORD; stdcall;
325
{$EXTERNALSYM VerLanguageNameA}
326
function VerLanguageNameW(wLang: DWORD; szLang: LPWSTR; nSize: DWORD): DWORD; stdcall;
327
{$EXTERNALSYM VerLanguageNameW}
328
function VerLanguageName(wLang: DWORD; szLang: LPTSTR; nSize: DWORD): DWORD; stdcall;
329
{$EXTERNALSYM VerLanguageName}
331
function VerQueryValueA(pBlock: LPVOID; lpSubBlock: LPSTR; var lplpBuffer: LPVOID;
332
var puLen: UINT): BOOL; stdcall;
333
{$EXTERNALSYM VerQueryValueA}
334
function VerQueryValueW(pBlock: LPVOID; lpSubBlock: LPWSTR; var lplpBuffer: LPVOID;
335
var puLen: UINT): BOOL; stdcall;
336
{$EXTERNALSYM VerQueryValueW}
337
function VerQueryValue(pBlock: LPVOID; lpSubBlock: LPTSTR; var lplpBuffer: LPVOID;
338
var puLen: UINT): BOOL; stdcall;
339
{$EXTERNALSYM VerQueryValue}
344
Version = 'version.dll';
351
{$IFDEF DYNAMIC_LINK}
354
_VerFindFileA: Pointer;
356
function VerFindFileA;
358
GetProcedureAddress(_VerFindFileA, Version, 'VerFindFileA');
367
_VerFindFileW: Pointer;
369
function VerFindFileW;
371
GetProcedureAddress(_VerFindFileW, Version, 'VerFindFileW');
380
_VerFindFile: Pointer;
382
function VerFindFile;
384
GetProcedureAddress(_VerFindFile, Version, 'VerFindFile' + AWSuffix);
393
_VerInstallFileA: Pointer;
395
function VerInstallFileA;
397
GetProcedureAddress(_VerInstallFileA, Version, 'VerInstallFileA');
401
JMP [_VerInstallFileA]
406
_VerInstallFileW: Pointer;
408
function VerInstallFileW;
410
GetProcedureAddress(_VerInstallFileW, Version, 'VerInstallFileW');
414
JMP [_VerInstallFileW]
419
_VerInstallFile: Pointer;
421
function VerInstallFile;
423
GetProcedureAddress(_VerInstallFile, Version, 'VerInstallFile' + AWSuffix);
427
JMP [_VerInstallFile]
432
_GetFileVersionInfoSizeA: Pointer;
434
function GetFileVersionInfoSizeA;
436
GetProcedureAddress(_GetFileVersionInfoSizeA, Version, 'GetFileVersionInfoSizeA');
440
JMP [_GetFileVersionInfoSizeA]
445
_GetFileVersionInfoSizeW: Pointer;
447
function GetFileVersionInfoSizeW;
449
GetProcedureAddress(_GetFileVersionInfoSizeW, Version, 'GetFileVersionInfoSizeW');
453
JMP [_GetFileVersionInfoSizeW]
458
_GetFileVersionInfoSize: Pointer;
460
function GetFileVersionInfoSize;
462
GetProcedureAddress(_GetFileVersionInfoSize, Version, 'GetFileVersionInfoSize' + AWSuffix);
466
JMP [_GetFileVersionInfoSize]
471
_GetFileVersionInfoA: Pointer;
473
function GetFileVersionInfoA;
475
GetProcedureAddress(_GetFileVersionInfoA, Version, 'GetFileVersionInfoA');
479
JMP [_GetFileVersionInfoA]
484
_GetFileVersionInfoW: Pointer;
486
function GetFileVersionInfoW;
488
GetProcedureAddress(_GetFileVersionInfoW, Version, 'GetFileVersionInfoW');
492
JMP [_GetFileVersionInfoW]
497
_GetFileVersionInfo: Pointer;
499
function GetFileVersionInfo;
501
GetProcedureAddress(_GetFileVersionInfo, Version, 'GetFileVersionInfo' + AWSuffix);
505
JMP [_GetFileVersionInfo]
510
_VerLanguageNameA: Pointer;
512
function VerLanguageNameA;
514
GetProcedureAddress(_VerLanguageNameA, Version, 'VerLanguageNameA');
518
JMP [_VerLanguageNameA]
523
_VerLanguageNameW: Pointer;
525
function VerLanguageNameW;
527
GetProcedureAddress(_VerLanguageNameW, Version, 'VerLanguageNameW');
531
JMP [_VerLanguageNameW]
536
_VerLanguageName: Pointer;
538
function VerLanguageName;
540
GetProcedureAddress(_VerLanguageName, Version, 'VerLanguageName' + AWSuffix);
544
JMP [_VerLanguageName]
549
_VerQueryValueA: Pointer;
551
function VerQueryValueA;
553
GetProcedureAddress(_VerQueryValueA, Version, 'VerQueryValueA');
557
JMP [_VerQueryValueA]
562
_VerQueryValueW: Pointer;
564
function VerQueryValueW;
566
GetProcedureAddress(_VerQueryValueW, Version, 'VerQueryValueW');
570
JMP [_VerQueryValueW]
575
_VerQueryValue: Pointer;
577
function VerQueryValue;
579
GetProcedureAddress(_VerQueryValue, Version, 'VerQueryValue' + AWSuffix);
589
function VerFindFileA; external Version name 'VerFindFileA';
590
function VerFindFileW; external Version name 'VerFindFileW';
591
function VerFindFile; external Version name 'VerFindFile' + AWSuffix;
592
function VerInstallFileA; external Version name 'VerInstallFileA';
593
function VerInstallFileW; external Version name 'VerInstallFileW';
594
function VerInstallFile; external Version name 'VerInstallFile' + AWSuffix;
595
function GetFileVersionInfoSizeA; external Version name 'GetFileVersionInfoSizeA';
596
function GetFileVersionInfoSizeW; external Version name 'GetFileVersionInfoSizeW';
597
function GetFileVersionInfoSize; external Version name 'GetFileVersionInfoSize' + AWSuffix;
598
function GetFileVersionInfoA; external Version name 'GetFileVersionInfoA';
599
function GetFileVersionInfoW; external Version name 'GetFileVersionInfoW';
600
function GetFileVersionInfo; external Version name 'GetFileVersionInfo' + AWSuffix;
601
function VerLanguageNameA; external Version name 'VerLanguageNameA';
602
function VerLanguageNameW; external Version name 'VerLanguageNameW';
603
function VerLanguageName; external Version name 'VerLanguageName' + AWSuffix;
604
function VerQueryValueA; external Version name 'VerQueryValueA';
605
function VerQueryValueW; external Version name 'VerQueryValueW';
606
function VerQueryValue; external Version name 'VerQueryValue' + AWSuffix;
608
{$ENDIF DYNAMIC_LINK}