jwawinver.pas 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610
  1. {******************************************************************************}
  2. { }
  3. { Windows Version API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  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). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  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 }
  19. { }
  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 }
  24. { }
  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. }
  28. { }
  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. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. unit JwaWinVer;
  43. {$WEAKPACKAGEUNIT}
  44. {$HPPEMIT ''}
  45. {$HPPEMIT '#include "WinVer.h"'}
  46. {$HPPEMIT ''}
  47. {$I jediapilib.inc}
  48. interface
  49. uses
  50. JwaWinUser, JwaWinType;
  51. const
  52. // RT_VERSION = MAKEINTRESOURCE(16);
  53. // ----- Symbols -----
  54. VS_FILE_INFO = RT_VERSION;
  55. {$EXTERNALSYM VS_FILE_INFO}
  56. VS_VERSION_INFO = 1;
  57. {$EXTERNALSYM VS_VERSION_INFO}
  58. VS_USER_DEFINED = 100;
  59. {$EXTERNALSYM VS_USER_DEFINED}
  60. // ----- VS_VERSION.dwFileFlags -----
  61. VS_FFI_SIGNATURE = $FEEF04BD;
  62. {$EXTERNALSYM VS_FFI_SIGNATURE}
  63. VS_FFI_STRUCVERSION = $00010000;
  64. {$EXTERNALSYM VS_FFI_STRUCVERSION}
  65. VS_FFI_FILEFLAGSMASK = $0000003F;
  66. {$EXTERNALSYM VS_FFI_FILEFLAGSMASK}
  67. // ----- VS_VERSION.dwFileFlags -----
  68. VS_FF_DEBUG = $00000001;
  69. {$EXTERNALSYM VS_FF_DEBUG}
  70. VS_FF_PRERELEASE = $00000002;
  71. {$EXTERNALSYM VS_FF_PRERELEASE}
  72. VS_FF_PATCHED = $00000004;
  73. {$EXTERNALSYM VS_FF_PATCHED}
  74. VS_FF_PRIVATEBUILD = $00000008;
  75. {$EXTERNALSYM VS_FF_PRIVATEBUILD}
  76. VS_FF_INFOINFERRED = $00000010;
  77. {$EXTERNALSYM VS_FF_INFOINFERRED}
  78. VS_FF_SPECIALBUILD = $00000020;
  79. {$EXTERNALSYM VS_FF_SPECIALBUILD}
  80. // ----- VS_VERSION.dwFileOS -----
  81. VOS_UNKNOWN = $00000000;
  82. {$EXTERNALSYM VOS_UNKNOWN}
  83. VOS_DOS = $00010000;
  84. {$EXTERNALSYM VOS_DOS}
  85. VOS_OS216 = $00020000;
  86. {$EXTERNALSYM VOS_OS216}
  87. VOS_OS232 = $00030000;
  88. {$EXTERNALSYM VOS_OS232}
  89. VOS_NT = $00040000;
  90. {$EXTERNALSYM VOS_NT}
  91. VOS_WINCE = $00050000;
  92. {$EXTERNALSYM VOS_WINCE}
  93. VOS__BASE = $00000000;
  94. {$EXTERNALSYM VOS__BASE}
  95. VOS__WINDOWS16 = $00000001;
  96. {$EXTERNALSYM VOS__WINDOWS16}
  97. VOS__PM16 = $00000002;
  98. {$EXTERNALSYM VOS__PM16}
  99. VOS__PM32 = $00000003;
  100. {$EXTERNALSYM VOS__PM32}
  101. VOS__WINDOWS32 = $00000004;
  102. {$EXTERNALSYM VOS__WINDOWS32}
  103. VOS_DOS_WINDOWS16 = $00010001;
  104. {$EXTERNALSYM VOS_DOS_WINDOWS16}
  105. VOS_DOS_WINDOWS32 = $00010004;
  106. {$EXTERNALSYM VOS_DOS_WINDOWS32}
  107. VOS_OS216_PM16 = $00020002;
  108. {$EXTERNALSYM VOS_OS216_PM16}
  109. VOS_OS232_PM32 = $00030003;
  110. {$EXTERNALSYM VOS_OS232_PM32}
  111. VOS_NT_WINDOWS32 = $00040004;
  112. {$EXTERNALSYM VOS_NT_WINDOWS32}
  113. // ----- VS_VERSION.dwFileType -----
  114. VFT_UNKNOWN = $00000000;
  115. {$EXTERNALSYM VFT_UNKNOWN}
  116. VFT_APP = $00000001;
  117. {$EXTERNALSYM VFT_APP}
  118. VFT_DLL = $00000002;
  119. {$EXTERNALSYM VFT_DLL}
  120. VFT_DRV = $00000003;
  121. {$EXTERNALSYM VFT_DRV}
  122. VFT_FONT = $00000004;
  123. {$EXTERNALSYM VFT_FONT}
  124. VFT_VXD = $00000005;
  125. {$EXTERNALSYM VFT_VXD}
  126. VFT_STATIC_LIB = $00000007;
  127. {$EXTERNALSYM VFT_STATIC_LIB}
  128. // ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV -----
  129. VFT2_UNKNOWN = $00000000;
  130. {$EXTERNALSYM VFT2_UNKNOWN}
  131. VFT2_DRV_PRINTER = $00000001;
  132. {$EXTERNALSYM VFT2_DRV_PRINTER}
  133. VFT2_DRV_KEYBOARD = $00000002;
  134. {$EXTERNALSYM VFT2_DRV_KEYBOARD}
  135. VFT2_DRV_LANGUAGE = $00000003;
  136. {$EXTERNALSYM VFT2_DRV_LANGUAGE}
  137. VFT2_DRV_DISPLAY = $00000004;
  138. {$EXTERNALSYM VFT2_DRV_DISPLAY}
  139. VFT2_DRV_MOUSE = $00000005;
  140. {$EXTERNALSYM VFT2_DRV_MOUSE}
  141. VFT2_DRV_NETWORK = $00000006;
  142. {$EXTERNALSYM VFT2_DRV_NETWORK}
  143. VFT2_DRV_SYSTEM = $00000007;
  144. {$EXTERNALSYM VFT2_DRV_SYSTEM}
  145. VFT2_DRV_INSTALLABLE = $00000008;
  146. {$EXTERNALSYM VFT2_DRV_INSTALLABLE}
  147. VFT2_DRV_SOUND = $00000009;
  148. {$EXTERNALSYM VFT2_DRV_SOUND}
  149. VFT2_DRV_COMM = $0000000A;
  150. {$EXTERNALSYM VFT2_DRV_COMM}
  151. VFT2_DRV_INPUTMETHOD = $0000000B;
  152. {$EXTERNALSYM VFT2_DRV_INPUTMETHOD}
  153. VFT2_DRV_VERSIONED_PRINTER = $0000000C;
  154. {$EXTERNALSYM VFT2_DRV_VERSIONED_PRINTER}
  155. // ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT -----
  156. VFT2_FONT_RASTER = $00000001;
  157. {$EXTERNALSYM VFT2_FONT_RASTER}
  158. VFT2_FONT_VECTOR = $00000002;
  159. {$EXTERNALSYM VFT2_FONT_VECTOR}
  160. VFT2_FONT_TRUETYPE = $00000003;
  161. {$EXTERNALSYM VFT2_FONT_TRUETYPE}
  162. // ----- VerFindFile() flags -----
  163. VFFF_ISSHAREDFILE = $0001;
  164. {$EXTERNALSYM VFFF_ISSHAREDFILE}
  165. VFF_CURNEDEST = $0001;
  166. {$EXTERNALSYM VFF_CURNEDEST}
  167. VFF_FILEINUSE = $0002;
  168. {$EXTERNALSYM VFF_FILEINUSE}
  169. VFF_BUFFTOOSMALL = $0004;
  170. {$EXTERNALSYM VFF_BUFFTOOSMALL}
  171. // ----- VerInstallFile() flags -----
  172. VIFF_FORCEINSTALL = $0001;
  173. {$EXTERNALSYM VIFF_FORCEINSTALL}
  174. VIFF_DONTDELETEOLD = $0002;
  175. {$EXTERNALSYM VIFF_DONTDELETEOLD}
  176. VIF_TEMPFILE = $00000001;
  177. {$EXTERNALSYM VIF_TEMPFILE}
  178. VIF_MISMATCH = $00000002;
  179. {$EXTERNALSYM VIF_MISMATCH}
  180. VIF_SRCOLD = $00000004;
  181. {$EXTERNALSYM VIF_SRCOLD}
  182. VIF_DIFFLANG = $00000008;
  183. {$EXTERNALSYM VIF_DIFFLANG}
  184. VIF_DIFFCODEPG = $00000010;
  185. {$EXTERNALSYM VIF_DIFFCODEPG}
  186. VIF_DIFFTYPE = $00000020;
  187. {$EXTERNALSYM VIF_DIFFTYPE}
  188. VIF_WRITEPROT = $00000040;
  189. {$EXTERNALSYM VIF_WRITEPROT}
  190. VIF_FILEINUSE = $00000080;
  191. {$EXTERNALSYM VIF_FILEINUSE}
  192. VIF_OUTOFSPACE = $00000100;
  193. {$EXTERNALSYM VIF_OUTOFSPACE}
  194. VIF_ACCESSVIOLATION = $00000200;
  195. {$EXTERNALSYM VIF_ACCESSVIOLATION}
  196. VIF_SHARINGVIOLATION = $00000400;
  197. {$EXTERNALSYM VIF_SHARINGVIOLATION}
  198. VIF_CANNOTCREATE = $00000800;
  199. {$EXTERNALSYM VIF_CANNOTCREATE}
  200. VIF_CANNOTDELETE = $00001000;
  201. {$EXTERNALSYM VIF_CANNOTDELETE}
  202. VIF_CANNOTRENAME = $00002000;
  203. {$EXTERNALSYM VIF_CANNOTRENAME}
  204. VIF_CANNOTDELETECUR = $00004000;
  205. {$EXTERNALSYM VIF_CANNOTDELETECUR}
  206. VIF_OUTOFMEMORY = $00008000;
  207. {$EXTERNALSYM VIF_OUTOFMEMORY}
  208. VIF_CANNOTREADSRC = $00010000;
  209. {$EXTERNALSYM VIF_CANNOTREADSRC}
  210. VIF_CANNOTREADDST = $00020000;
  211. {$EXTERNALSYM VIF_CANNOTREADDST}
  212. VIF_BUFFTOOSMALL = $00040000;
  213. {$EXTERNALSYM VIF_BUFFTOOSMALL}
  214. VIF_CANNOTLOADLZ32 = $00080000;
  215. {$EXTERNALSYM VIF_CANNOTLOADLZ32}
  216. VIF_CANNOTLOADCABINET = $00100000;
  217. {$EXTERNALSYM VIF_CANNOTLOADCABINET}
  218. // ----- Types and structures -----
  219. type
  220. PVSFixedFileInfo = ^VS_FIXEDFILEINFO;
  221. tagVS_FIXEDFILEINFO = record
  222. dwSignature: DWORD; // e.g. 0xfeef04bd
  223. dwStrucVersion: DWORD; // e.g. 0x00000042 = "0.42"
  224. dwFileVersionMS: DWORD; // e.g. 0x00030075 = "3.75"
  225. dwFileVersionLS: DWORD; // e.g. 0x00000031 = "0.31"
  226. dwProductVersionMS: DWORD; // e.g. 0x00030010 = "3.10"
  227. dwProductVersionLS: DWORD; // e.g. 0x00000031 = "0.31"
  228. dwFileFlagsMask: DWORD; // = 0x3F for version "0.42"
  229. dwFileFlags: DWORD; // e.g. VFF_DEBUG | VFF_PRERELEASE
  230. dwFileOS: DWORD; // e.g. VOS_DOS_WINDOWS16
  231. dwFileType: DWORD; // e.g. VFT_DRIVER
  232. dwFileSubtype: DWORD; // e.g. VFT2_DRV_KEYBOARD
  233. dwFileDateMS: DWORD; // e.g. 0
  234. dwFileDateLS: DWORD; // e.g. 0
  235. end;
  236. {$EXTERNALSYM tagVS_FIXEDFILEINFO}
  237. VS_FIXEDFILEINFO = tagVS_FIXEDFILEINFO;
  238. {$EXTERNALSYM VS_FIXEDFILEINFO}
  239. TVSFixedFileInfo = VS_FIXEDFILEINFO;
  240. // ----- Function prototypes -----
  241. function VerFindFileA(uFlags: DWORD; szFileName, szWinDir, szAppDir,
  242. szCurDir: LPSTR; var lpuCurDirLen: UINT; szDestDir: LPSTR;
  243. var lpuDestDirLen: UINT): DWORD; stdcall;
  244. {$EXTERNALSYM VerFindFileA}
  245. function VerFindFileW(uFlags: DWORD; szFileName, szWinDir, szAppDir,
  246. szCurDir: LPWSTR; var lpuCurDirLen: UINT; szDestDir: LPWSTR;
  247. var lpuDestDirLen: UINT): DWORD; stdcall;
  248. {$EXTERNALSYM VerFindFileW}
  249. function VerFindFile(uFlags: DWORD; szFileName, szWinDir, szAppDir,
  250. szCurDir: LPTSTR; var lpuCurDirLen: UINT; szDestDir: LPTSTR;
  251. var lpuDestDirLen: UINT): DWORD; stdcall;
  252. {$EXTERNALSYM VerFindFile}
  253. function VerInstallFileA(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
  254. szDestDir, szCurDir, szTmpFile: LPSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
  255. {$EXTERNALSYM VerInstallFileA}
  256. function VerInstallFileW(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
  257. szDestDir, szCurDir, szTmpFile: LPWSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
  258. {$EXTERNALSYM VerInstallFileW}
  259. function VerInstallFile(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
  260. szDestDir, szCurDir, szTmpFile: LPTSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
  261. {$EXTERNALSYM VerInstallFile}
  262. // Returns size of version info in bytes
  263. function GetFileVersionInfoSizeA(lptstrFilename: LPCSTR; var lpdwHandle: DWORD): DWORD; stdcall;
  264. {$EXTERNALSYM GetFileVersionInfoSizeA}
  265. function GetFileVersionInfoSizeW(lptstrFilename: LPCWSTR; var lpdwHandle: DWORD): DWORD; stdcall;
  266. {$EXTERNALSYM GetFileVersionInfoSizeW}
  267. function GetFileVersionInfoSize(lptstrFilename: LPCTSTR; var lpdwHandle: DWORD): DWORD; stdcall;
  268. {$EXTERNALSYM GetFileVersionInfoSize}
  269. // Read version info into buffer
  270. function GetFileVersionInfoA(lptstrFilename: LPCSTR; dwHandle, dwLen: DWORD;
  271. lpData: LPVOID): BOOL; stdcall;
  272. {$EXTERNALSYM GetFileVersionInfoA}
  273. function GetFileVersionInfoW(lptstrFilename: LPCWSTR; dwHandle, dwLen: DWORD;
  274. lpData: LPVOID): BOOL; stdcall;
  275. {$EXTERNALSYM GetFileVersionInfoW}
  276. function GetFileVersionInfo(lptstrFilename: LPCTSTR; dwHandle, dwLen: DWORD;
  277. lpData: LPVOID): BOOL; stdcall;
  278. {$EXTERNALSYM GetFileVersionInfo}
  279. function VerLanguageNameA(wLang: DWORD; szLang: LPSTR; nSize: DWORD): DWORD; stdcall;
  280. {$EXTERNALSYM VerLanguageNameA}
  281. function VerLanguageNameW(wLang: DWORD; szLang: LPWSTR; nSize: DWORD): DWORD; stdcall;
  282. {$EXTERNALSYM VerLanguageNameW}
  283. function VerLanguageName(wLang: DWORD; szLang: LPTSTR; nSize: DWORD): DWORD; stdcall;
  284. {$EXTERNALSYM VerLanguageName}
  285. function VerQueryValueA(pBlock: LPVOID; lpSubBlock: LPSTR; var lplpBuffer: LPVOID;
  286. var puLen: UINT): BOOL; stdcall;
  287. {$EXTERNALSYM VerQueryValueA}
  288. function VerQueryValueW(pBlock: LPVOID; lpSubBlock: LPWSTR; var lplpBuffer: LPVOID;
  289. var puLen: UINT): BOOL; stdcall;
  290. {$EXTERNALSYM VerQueryValueW}
  291. function VerQueryValue(pBlock: LPVOID; lpSubBlock: LPTSTR; var lplpBuffer: LPVOID;
  292. var puLen: UINT): BOOL; stdcall;
  293. {$EXTERNALSYM VerQueryValue}
  294. implementation
  295. const
  296. Version = 'version.dll';
  297. {$IFDEF UNICODE}
  298. AWSuffix = 'W';
  299. {$ELSE}
  300. AWSuffix = 'A';
  301. {$ENDIF UNICODE}
  302. {$IFDEF DYNAMIC_LINK}
  303. var
  304. _VerFindFileA: Pointer;
  305. function VerFindFileA;
  306. begin
  307. GetProcedureAddress(_VerFindFileA, Version, 'VerFindFileA');
  308. asm
  309. MOV ESP, EBP
  310. POP EBP
  311. JMP [_VerFindFileA]
  312. end;
  313. end;
  314. var
  315. _VerFindFileW: Pointer;
  316. function VerFindFileW;
  317. begin
  318. GetProcedureAddress(_VerFindFileW, Version, 'VerFindFileW');
  319. asm
  320. MOV ESP, EBP
  321. POP EBP
  322. JMP [_VerFindFileW]
  323. end;
  324. end;
  325. var
  326. _VerFindFile: Pointer;
  327. function VerFindFile;
  328. begin
  329. GetProcedureAddress(_VerFindFile, Version, 'VerFindFile' + AWSuffix);
  330. asm
  331. MOV ESP, EBP
  332. POP EBP
  333. JMP [_VerFindFile]
  334. end;
  335. end;
  336. var
  337. _VerInstallFileA: Pointer;
  338. function VerInstallFileA;
  339. begin
  340. GetProcedureAddress(_VerInstallFileA, Version, 'VerInstallFileA');
  341. asm
  342. MOV ESP, EBP
  343. POP EBP
  344. JMP [_VerInstallFileA]
  345. end;
  346. end;
  347. var
  348. _VerInstallFileW: Pointer;
  349. function VerInstallFileW;
  350. begin
  351. GetProcedureAddress(_VerInstallFileW, Version, 'VerInstallFileW');
  352. asm
  353. MOV ESP, EBP
  354. POP EBP
  355. JMP [_VerInstallFileW]
  356. end;
  357. end;
  358. var
  359. _VerInstallFile: Pointer;
  360. function VerInstallFile;
  361. begin
  362. GetProcedureAddress(_VerInstallFile, Version, 'VerInstallFile' + AWSuffix);
  363. asm
  364. MOV ESP, EBP
  365. POP EBP
  366. JMP [_VerInstallFile]
  367. end;
  368. end;
  369. var
  370. _GetFileVersionInfoSizeA: Pointer;
  371. function GetFileVersionInfoSizeA;
  372. begin
  373. GetProcedureAddress(_GetFileVersionInfoSizeA, Version, 'GetFileVersionInfoSizeA');
  374. asm
  375. MOV ESP, EBP
  376. POP EBP
  377. JMP [_GetFileVersionInfoSizeA]
  378. end;
  379. end;
  380. var
  381. _GetFileVersionInfoSizeW: Pointer;
  382. function GetFileVersionInfoSizeW;
  383. begin
  384. GetProcedureAddress(_GetFileVersionInfoSizeW, Version, 'GetFileVersionInfoSizeW');
  385. asm
  386. MOV ESP, EBP
  387. POP EBP
  388. JMP [_GetFileVersionInfoSizeW]
  389. end;
  390. end;
  391. var
  392. _GetFileVersionInfoSize: Pointer;
  393. function GetFileVersionInfoSize;
  394. begin
  395. GetProcedureAddress(_GetFileVersionInfoSize, Version, 'GetFileVersionInfoSize' + AWSuffix);
  396. asm
  397. MOV ESP, EBP
  398. POP EBP
  399. JMP [_GetFileVersionInfoSize]
  400. end;
  401. end;
  402. var
  403. _GetFileVersionInfoA: Pointer;
  404. function GetFileVersionInfoA;
  405. begin
  406. GetProcedureAddress(_GetFileVersionInfoA, Version, 'GetFileVersionInfoA');
  407. asm
  408. MOV ESP, EBP
  409. POP EBP
  410. JMP [_GetFileVersionInfoA]
  411. end;
  412. end;
  413. var
  414. _GetFileVersionInfoW: Pointer;
  415. function GetFileVersionInfoW;
  416. begin
  417. GetProcedureAddress(_GetFileVersionInfoW, Version, 'GetFileVersionInfoW');
  418. asm
  419. MOV ESP, EBP
  420. POP EBP
  421. JMP [_GetFileVersionInfoW]
  422. end;
  423. end;
  424. var
  425. _GetFileVersionInfo: Pointer;
  426. function GetFileVersionInfo;
  427. begin
  428. GetProcedureAddress(_GetFileVersionInfo, Version, 'GetFileVersionInfo' + AWSuffix);
  429. asm
  430. MOV ESP, EBP
  431. POP EBP
  432. JMP [_GetFileVersionInfo]
  433. end;
  434. end;
  435. var
  436. _VerLanguageNameA: Pointer;
  437. function VerLanguageNameA;
  438. begin
  439. GetProcedureAddress(_VerLanguageNameA, Version, 'VerLanguageNameA');
  440. asm
  441. MOV ESP, EBP
  442. POP EBP
  443. JMP [_VerLanguageNameA]
  444. end;
  445. end;
  446. var
  447. _VerLanguageNameW: Pointer;
  448. function VerLanguageNameW;
  449. begin
  450. GetProcedureAddress(_VerLanguageNameW, Version, 'VerLanguageNameW');
  451. asm
  452. MOV ESP, EBP
  453. POP EBP
  454. JMP [_VerLanguageNameW]
  455. end;
  456. end;
  457. var
  458. _VerLanguageName: Pointer;
  459. function VerLanguageName;
  460. begin
  461. GetProcedureAddress(_VerLanguageName, Version, 'VerLanguageName' + AWSuffix);
  462. asm
  463. MOV ESP, EBP
  464. POP EBP
  465. JMP [_VerLanguageName]
  466. end;
  467. end;
  468. var
  469. _VerQueryValueA: Pointer;
  470. function VerQueryValueA;
  471. begin
  472. GetProcedureAddress(_VerQueryValueA, Version, 'VerQueryValueA');
  473. asm
  474. MOV ESP, EBP
  475. POP EBP
  476. JMP [_VerQueryValueA]
  477. end;
  478. end;
  479. var
  480. _VerQueryValueW: Pointer;
  481. function VerQueryValueW;
  482. begin
  483. GetProcedureAddress(_VerQueryValueW, Version, 'VerQueryValueW');
  484. asm
  485. MOV ESP, EBP
  486. POP EBP
  487. JMP [_VerQueryValueW]
  488. end;
  489. end;
  490. var
  491. _VerQueryValue: Pointer;
  492. function VerQueryValue;
  493. begin
  494. GetProcedureAddress(_VerQueryValue, Version, 'VerQueryValue' + AWSuffix);
  495. asm
  496. MOV ESP, EBP
  497. POP EBP
  498. JMP [_VerQueryValue]
  499. end;
  500. end;
  501. {$ELSE}
  502. function VerFindFileA; external Version name 'VerFindFileA';
  503. function VerFindFileW; external Version name 'VerFindFileW';
  504. function VerFindFile; external Version name 'VerFindFile' + AWSuffix;
  505. function VerInstallFileA; external Version name 'VerInstallFileA';
  506. function VerInstallFileW; external Version name 'VerInstallFileW';
  507. function VerInstallFile; external Version name 'VerInstallFile' + AWSuffix;
  508. function GetFileVersionInfoSizeA; external Version name 'GetFileVersionInfoSizeA';
  509. function GetFileVersionInfoSizeW; external Version name 'GetFileVersionInfoSizeW';
  510. function GetFileVersionInfoSize; external Version name 'GetFileVersionInfoSize' + AWSuffix;
  511. function GetFileVersionInfoA; external Version name 'GetFileVersionInfoA';
  512. function GetFileVersionInfoW; external Version name 'GetFileVersionInfoW';
  513. function GetFileVersionInfo; external Version name 'GetFileVersionInfo' + AWSuffix;
  514. function VerLanguageNameA; external Version name 'VerLanguageNameA';
  515. function VerLanguageNameW; external Version name 'VerLanguageNameW';
  516. function VerLanguageName; external Version name 'VerLanguageName' + AWSuffix;
  517. function VerQueryValueA; external Version name 'VerQueryValueA';
  518. function VerQueryValueW; external Version name 'VerQueryValueW';
  519. function VerQueryValue; external Version name 'VerQueryValue' + AWSuffix;
  520. {$ENDIF DYNAMIC_LINK}
  521. end.