JwaWinVer.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:23k
源码类别:

Windows编程

开发平台:

Delphi

  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@chello.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 home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaWinVer;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "WinVer.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaWinUser, JwaWinType; 
  52. const
  53. //  RT_VERSION = MAKEINTRESOURCE(16);
  54. // ----- Symbols -----
  55.   VS_FILE_INFO    = RT_VERSION;
  56.   {$EXTERNALSYM VS_FILE_INFO}
  57.   VS_VERSION_INFO = 1;
  58.   {$EXTERNALSYM VS_VERSION_INFO}
  59.   VS_USER_DEFINED = 100;
  60.   {$EXTERNALSYM VS_USER_DEFINED}
  61. // ----- VS_VERSION.dwFileFlags -----
  62.   VS_FFI_SIGNATURE     = $FEEF04BD;
  63.   {$EXTERNALSYM VS_FFI_SIGNATURE}
  64.   VS_FFI_STRUCVERSION  = $00010000;
  65.   {$EXTERNALSYM VS_FFI_STRUCVERSION}
  66.   VS_FFI_FILEFLAGSMASK = $0000003F;
  67.   {$EXTERNALSYM VS_FFI_FILEFLAGSMASK}
  68. // ----- VS_VERSION.dwFileFlags -----
  69.   VS_FF_DEBUG        = $00000001;
  70.   {$EXTERNALSYM VS_FF_DEBUG}
  71.   VS_FF_PRERELEASE   = $00000002;
  72.   {$EXTERNALSYM VS_FF_PRERELEASE}
  73.   VS_FF_PATCHED      = $00000004;
  74.   {$EXTERNALSYM VS_FF_PATCHED}
  75.   VS_FF_PRIVATEBUILD = $00000008;
  76.   {$EXTERNALSYM VS_FF_PRIVATEBUILD}
  77.   VS_FF_INFOINFERRED = $00000010;
  78.   {$EXTERNALSYM VS_FF_INFOINFERRED}
  79.   VS_FF_SPECIALBUILD = $00000020;
  80.   {$EXTERNALSYM VS_FF_SPECIALBUILD}
  81. // ----- VS_VERSION.dwFileOS -----
  82.   VOS_UNKNOWN = $00000000;
  83.   {$EXTERNALSYM VOS_UNKNOWN}
  84.   VOS_DOS     = $00010000;
  85.   {$EXTERNALSYM VOS_DOS}
  86.   VOS_OS216   = $00020000;
  87.   {$EXTERNALSYM VOS_OS216}
  88.   VOS_OS232   = $00030000;
  89.   {$EXTERNALSYM VOS_OS232}
  90.   VOS_NT      = $00040000;
  91.   {$EXTERNALSYM VOS_NT}
  92.   VOS_WINCE   = $00050000;
  93.   {$EXTERNALSYM VOS_WINCE}
  94.   VOS__BASE      = $00000000;
  95.   {$EXTERNALSYM VOS__BASE}
  96.   VOS__WINDOWS16 = $00000001;
  97.   {$EXTERNALSYM VOS__WINDOWS16}
  98.   VOS__PM16      = $00000002;
  99.   {$EXTERNALSYM VOS__PM16}
  100.   VOS__PM32      = $00000003;
  101.   {$EXTERNALSYM VOS__PM32}
  102.   VOS__WINDOWS32 = $00000004;
  103.   {$EXTERNALSYM VOS__WINDOWS32}
  104.   VOS_DOS_WINDOWS16 = $00010001;
  105.   {$EXTERNALSYM VOS_DOS_WINDOWS16}
  106.   VOS_DOS_WINDOWS32 = $00010004;
  107.   {$EXTERNALSYM VOS_DOS_WINDOWS32}
  108.   VOS_OS216_PM16    = $00020002;
  109.   {$EXTERNALSYM VOS_OS216_PM16}
  110.   VOS_OS232_PM32    = $00030003;
  111.   {$EXTERNALSYM VOS_OS232_PM32}
  112.   VOS_NT_WINDOWS32  = $00040004;
  113.   {$EXTERNALSYM VOS_NT_WINDOWS32}
  114. // ----- VS_VERSION.dwFileType -----
  115.   VFT_UNKNOWN    = $00000000;
  116.   {$EXTERNALSYM VFT_UNKNOWN}
  117.   VFT_APP        = $00000001;
  118.   {$EXTERNALSYM VFT_APP}
  119.   VFT_DLL        = $00000002;
  120.   {$EXTERNALSYM VFT_DLL}
  121.   VFT_DRV        = $00000003;
  122.   {$EXTERNALSYM VFT_DRV}
  123.   VFT_FONT       = $00000004;
  124.   {$EXTERNALSYM VFT_FONT}
  125.   VFT_VXD        = $00000005;
  126.   {$EXTERNALSYM VFT_VXD}
  127.   VFT_STATIC_LIB = $00000007;
  128.   {$EXTERNALSYM VFT_STATIC_LIB}
  129. // ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV -----
  130.   VFT2_UNKNOWN         = $00000000;
  131.   {$EXTERNALSYM VFT2_UNKNOWN}
  132.   VFT2_DRV_PRINTER     = $00000001;
  133.   {$EXTERNALSYM VFT2_DRV_PRINTER}
  134.   VFT2_DRV_KEYBOARD    = $00000002;
  135.   {$EXTERNALSYM VFT2_DRV_KEYBOARD}
  136.   VFT2_DRV_LANGUAGE    = $00000003;
  137.   {$EXTERNALSYM VFT2_DRV_LANGUAGE}
  138.   VFT2_DRV_DISPLAY     = $00000004;
  139.   {$EXTERNALSYM VFT2_DRV_DISPLAY}
  140.   VFT2_DRV_MOUSE       = $00000005;
  141.   {$EXTERNALSYM VFT2_DRV_MOUSE}
  142.   VFT2_DRV_NETWORK     = $00000006;
  143.   {$EXTERNALSYM VFT2_DRV_NETWORK}
  144.   VFT2_DRV_SYSTEM      = $00000007;
  145.   {$EXTERNALSYM VFT2_DRV_SYSTEM}
  146.   VFT2_DRV_INSTALLABLE = $00000008;
  147.   {$EXTERNALSYM VFT2_DRV_INSTALLABLE}
  148.   VFT2_DRV_SOUND       = $00000009;
  149.   {$EXTERNALSYM VFT2_DRV_SOUND}
  150.   VFT2_DRV_COMM        = $0000000A;
  151.   {$EXTERNALSYM VFT2_DRV_COMM}
  152.   VFT2_DRV_INPUTMETHOD = $0000000B;
  153.   {$EXTERNALSYM VFT2_DRV_INPUTMETHOD}
  154.   VFT2_DRV_VERSIONED_PRINTER = $0000000C;
  155.   {$EXTERNALSYM VFT2_DRV_VERSIONED_PRINTER}
  156. // ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT -----
  157.   VFT2_FONT_RASTER   = $00000001;
  158.   {$EXTERNALSYM VFT2_FONT_RASTER}
  159.   VFT2_FONT_VECTOR   = $00000002;
  160.   {$EXTERNALSYM VFT2_FONT_VECTOR}
  161.   VFT2_FONT_TRUETYPE = $00000003;
  162.   {$EXTERNALSYM VFT2_FONT_TRUETYPE}
  163. // ----- VerFindFile() flags -----
  164.   VFFF_ISSHAREDFILE = $0001;
  165.   {$EXTERNALSYM VFFF_ISSHAREDFILE}
  166.   VFF_CURNEDEST     = $0001;
  167.   {$EXTERNALSYM VFF_CURNEDEST}
  168.   VFF_FILEINUSE     = $0002;
  169.   {$EXTERNALSYM VFF_FILEINUSE}
  170.   VFF_BUFFTOOSMALL  = $0004;
  171.   {$EXTERNALSYM VFF_BUFFTOOSMALL}
  172. // ----- VerInstallFile() flags -----
  173.   VIFF_FORCEINSTALL  = $0001;
  174.   {$EXTERNALSYM VIFF_FORCEINSTALL}
  175.   VIFF_DONTDELETEOLD = $0002;
  176.   {$EXTERNALSYM VIFF_DONTDELETEOLD}
  177.   VIF_TEMPFILE = $00000001;
  178.   {$EXTERNALSYM VIF_TEMPFILE}
  179.   VIF_MISMATCH = $00000002;
  180.   {$EXTERNALSYM VIF_MISMATCH}
  181.   VIF_SRCOLD   = $00000004;
  182.   {$EXTERNALSYM VIF_SRCOLD}
  183.   VIF_DIFFLANG   = $00000008;
  184.   {$EXTERNALSYM VIF_DIFFLANG}
  185.   VIF_DIFFCODEPG = $00000010;
  186.   {$EXTERNALSYM VIF_DIFFCODEPG}
  187.   VIF_DIFFTYPE   = $00000020;
  188.   {$EXTERNALSYM VIF_DIFFTYPE}
  189.   VIF_WRITEPROT        = $00000040;
  190.   {$EXTERNALSYM VIF_WRITEPROT}
  191.   VIF_FILEINUSE        = $00000080;
  192.   {$EXTERNALSYM VIF_FILEINUSE}
  193.   VIF_OUTOFSPACE       = $00000100;
  194.   {$EXTERNALSYM VIF_OUTOFSPACE}
  195.   VIF_ACCESSVIOLATION  = $00000200;
  196.   {$EXTERNALSYM VIF_ACCESSVIOLATION}
  197.   VIF_SHARINGVIOLATION = $00000400;
  198.   {$EXTERNALSYM VIF_SHARINGVIOLATION}
  199.   VIF_CANNOTCREATE     = $00000800;
  200.   {$EXTERNALSYM VIF_CANNOTCREATE}
  201.   VIF_CANNOTDELETE     = $00001000;
  202.   {$EXTERNALSYM VIF_CANNOTDELETE}
  203.   VIF_CANNOTRENAME     = $00002000;
  204.   {$EXTERNALSYM VIF_CANNOTRENAME}
  205.   VIF_CANNOTDELETECUR  = $00004000;
  206.   {$EXTERNALSYM VIF_CANNOTDELETECUR}
  207.   VIF_OUTOFMEMORY      = $00008000;
  208.   {$EXTERNALSYM VIF_OUTOFMEMORY}
  209.   VIF_CANNOTREADSRC = $00010000;
  210.   {$EXTERNALSYM VIF_CANNOTREADSRC}
  211.   VIF_CANNOTREADDST = $00020000;
  212.   {$EXTERNALSYM VIF_CANNOTREADDST}
  213.   VIF_BUFFTOOSMALL      = $00040000;
  214.   {$EXTERNALSYM VIF_BUFFTOOSMALL}
  215.   VIF_CANNOTLOADLZ32    = $00080000;
  216.   {$EXTERNALSYM VIF_CANNOTLOADLZ32}
  217.   VIF_CANNOTLOADCABINET = $00100000;
  218.   {$EXTERNALSYM VIF_CANNOTLOADCABINET}
  219. // ----- Types and structures -----
  220. type
  221. {$IFDEF USEDELPHI5}
  222.   PVSFixedFileInfo = Windows.PVSFixedFileInfo;
  223.   tagVS_FIXEDFILEINFO = Windows.tagVS_FIXEDFILEINFO;
  224.   VS_FIXEDFILEINFO = Windows.VS_FIXEDFILEINFO;
  225.   TVSFixedFileInfo = Windows.TVSFixedFileInfo;
  226. {$ELSE}
  227.   PVSFixedFileInfo = ^VS_FIXEDFILEINFO;
  228.   tagVS_FIXEDFILEINFO = record
  229.     dwSignature: DWORD;        // e.g. 0xfeef04bd
  230.     dwStrucVersion: DWORD;     // e.g. 0x00000042 = "0.42"
  231.     dwFileVersionMS: DWORD;    // e.g. 0x00030075 = "3.75"
  232.     dwFileVersionLS: DWORD;    // e.g. 0x00000031 = "0.31"
  233.     dwProductVersionMS: DWORD; // e.g. 0x00030010 = "3.10"
  234.     dwProductVersionLS: DWORD; // e.g. 0x00000031 = "0.31"
  235.     dwFileFlagsMask: DWORD;    // = 0x3F for version "0.42"
  236.     dwFileFlags: DWORD;        // e.g. VFF_DEBUG | VFF_PRERELEASE
  237.     dwFileOS: DWORD;           // e.g. VOS_DOS_WINDOWS16
  238.     dwFileType: DWORD;         // e.g. VFT_DRIVER
  239.     dwFileSubtype: DWORD;      // e.g. VFT2_DRV_KEYBOARD
  240.     dwFileDateMS: DWORD;       // e.g. 0
  241.     dwFileDateLS: DWORD;       // e.g. 0
  242.   end;
  243.   {$EXTERNALSYM tagVS_FIXEDFILEINFO}
  244.   VS_FIXEDFILEINFO = tagVS_FIXEDFILEINFO;
  245.   {$EXTERNALSYM VS_FIXEDFILEINFO}
  246.   TVSFixedFileInfo = VS_FIXEDFILEINFO;
  247. {$ENDIF}
  248. // ----- Function prototypes -----
  249. function VerFindFileA(uFlags: DWORD; szFileName, szWinDir, szAppDir,
  250.   szCurDir: LPSTR; var lpuCurDirLen: UINT; szDestDir: LPSTR;
  251.   var lpuDestDirLen: UINT): DWORD; stdcall;
  252. {$EXTERNALSYM VerFindFileA}
  253. function VerFindFileW(uFlags: DWORD; szFileName, szWinDir, szAppDir,
  254.   szCurDir: LPWSTR; var lpuCurDirLen: UINT; szDestDir: LPWSTR;
  255.   var lpuDestDirLen: UINT): DWORD; stdcall;
  256. {$EXTERNALSYM VerFindFileW}
  257. {$IFDEF UNICODE}
  258. function VerFindFile(uFlags: DWORD; szFileName, szWinDir, szAppDir,
  259.   szCurDir: LPWSTR; var lpuCurDirLen: UINT; szDestDir: LPWSTR;
  260.   var lpuDestDirLen: UINT): DWORD; stdcall;
  261. {$EXTERNALSYM VerFindFile}
  262. {$ELSE}
  263. function VerFindFile(uFlags: DWORD; szFileName, szWinDir, szAppDir,
  264.   szCurDir: LPSTR; var lpuCurDirLen: UINT; szDestDir: LPSTR;
  265.   var lpuDestDirLen: UINT): DWORD; stdcall;
  266. {$EXTERNALSYM VerFindFile}
  267. {$ENDIF}
  268. function VerInstallFileA(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
  269.   szDestDir, szCurDir, szTmpFile: LPSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
  270. {$EXTERNALSYM VerInstallFileA}
  271. function VerInstallFileW(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
  272.   szDestDir, szCurDir, szTmpFile: LPWSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
  273. {$EXTERNALSYM VerInstallFileW}
  274. {$IFDEF UNICODE}
  275. function VerInstallFile(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
  276.   szDestDir, szCurDir, szTmpFile: LPWSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
  277. {$EXTERNALSYM VerInstallFile}
  278. {$ELSE}
  279. function VerInstallFile(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
  280.   szDestDir, szCurDir, szTmpFile: LPSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
  281. {$EXTERNALSYM VerInstallFile}
  282. {$ENDIF}
  283. // Returns size of version info in bytes
  284. function GetFileVersionInfoSizeA(lptstrFilename: LPCSTR; var lpdwHandle: DWORD): DWORD; stdcall;
  285. {$EXTERNALSYM GetFileVersionInfoSizeA}
  286. function GetFileVersionInfoSizeW(lptstrFilename: LPCWSTR; var lpdwHandle: DWORD): DWORD; stdcall;
  287. {$EXTERNALSYM GetFileVersionInfoSizeW}
  288. {$IFDEF UNICODE}
  289. function GetFileVersionInfoSize(lptstrFilename: LPCWSTR; var lpdwHandle: DWORD): DWORD; stdcall;
  290. {$EXTERNALSYM GetFileVersionInfoSize}
  291. {$ELSE}
  292. function GetFileVersionInfoSize(lptstrFilename: LPCSTR; var lpdwHandle: DWORD): DWORD; stdcall;
  293. {$EXTERNALSYM GetFileVersionInfoSize}
  294. {$ENDIF}
  295. // Read version info into buffer
  296. function GetFileVersionInfoA(lptstrFilename: LPCSTR; dwHandle, dwLen: DWORD;
  297.   lpData: LPVOID): BOOL; stdcall;
  298. {$EXTERNALSYM GetFileVersionInfoA}
  299. function GetFileVersionInfoW(lptstrFilename: LPCWSTR; dwHandle, dwLen: DWORD;
  300.   lpData: LPVOID): BOOL; stdcall;
  301. {$EXTERNALSYM GetFileVersionInfoW}
  302. {$IFDEF UNICODE}
  303. function GetFileVersionInfo(lptstrFilename: LPCWSTR; dwHandle, dwLen: DWORD;
  304.   lpData: LPVOID): BOOL; stdcall;
  305. {$EXTERNALSYM GetFileVersionInfo}
  306. {$ELSE}
  307. function GetFileVersionInfo(lptstrFilename: LPCSTR; dwHandle, dwLen: DWORD;
  308.   lpData: LPVOID): BOOL; stdcall;
  309. {$EXTERNALSYM GetFileVersionInfo}
  310. {$ENDIF}
  311. function VerLanguageNameA(wLang: DWORD; szLang: LPSTR; nSize: DWORD): DWORD; stdcall;
  312. {$EXTERNALSYM VerLanguageNameA}
  313. function VerLanguageNameW(wLang: DWORD; szLang: LPWSTR; nSize: DWORD): DWORD; stdcall;
  314. {$EXTERNALSYM VerLanguageNameW}
  315. {$IFDEF UNICODE}
  316. function VerLanguageName(wLang: DWORD; szLang: LPWSTR; nSize: DWORD): DWORD; stdcall;
  317. {$EXTERNALSYM VerLanguageName}
  318. {$ELSE}
  319. function VerLanguageName(wLang: DWORD; szLang: LPSTR; nSize: DWORD): DWORD; stdcall;
  320. {$EXTERNALSYM VerLanguageName}
  321. {$ENDIF}
  322. function VerQueryValueA(pBlock: LPVOID; lpSubBlock: LPSTR; var lplpBuffer: LPVOID;
  323.   var puLen: UINT): BOOL; stdcall;
  324. {$EXTERNALSYM VerQueryValueA}
  325. function VerQueryValueW(pBlock: LPVOID; lpSubBlock: LPWSTR; var lplpBuffer: LPVOID;
  326.   var puLen: UINT): BOOL; stdcall;
  327. {$EXTERNALSYM VerQueryValueW}
  328. {$IFDEF UNICODE}
  329. function VerQueryValue(pBlock: LPVOID; lpSubBlock: LPWSTR; var lplpBuffer: LPVOID;
  330.   var puLen: UINT): BOOL; stdcall;
  331. {$EXTERNALSYM VerQueryValue}
  332. {$ELSE}
  333. function VerQueryValue(pBlock: LPVOID; lpSubBlock: LPSTR; var lplpBuffer: LPVOID;
  334.   var puLen: UINT): BOOL; stdcall;
  335. {$EXTERNALSYM VerQueryValue}
  336. {$ENDIF}
  337. implementation
  338. const
  339.   Version = 'version.dll';
  340. {$IFDEF DYNAMIC_LINK}
  341. var
  342.   _VerFindFileA: Pointer;
  343. function VerFindFileA;
  344. begin
  345.   GetProcedureAddress(_VerFindFileA, Version, 'VerFindFileA');
  346.   asm
  347.     mov esp, ebp
  348.     pop ebp
  349.     jmp [_VerFindFileA]
  350.   end;
  351. end;
  352. {$ELSE}
  353. function VerFindFileA; external Version name 'VerFindFileA';
  354. {$ENDIF DYNAMIC_LINK}
  355. {$IFDEF DYNAMIC_LINK}
  356. var
  357.   _VerFindFileW: Pointer;
  358. function VerFindFileW;
  359. begin
  360.   GetProcedureAddress(_VerFindFileW, Version, 'VerFindFileW');
  361.   asm
  362.     mov esp, ebp
  363.     pop ebp
  364.     jmp [_VerFindFileW]
  365.   end;
  366. end;
  367. {$ELSE}
  368. function VerFindFileW; external Version name 'VerFindFileW';
  369. {$ENDIF DYNAMIC_LINK}
  370. {$IFDEF UNICODE}
  371. {$IFDEF DYNAMIC_LINK}
  372. var
  373.   _VerFindFile: Pointer;
  374. function VerFindFile;
  375. begin
  376.   GetProcedureAddress(_VerFindFile, Version, 'VerFindFileW');
  377.   asm
  378.     mov esp, ebp
  379.     pop ebp
  380.     jmp [_VerFindFile]
  381.   end;
  382. end;
  383. {$ELSE}
  384. function VerFindFile; external Version name 'VerFindFileW';
  385. {$ENDIF DYNAMIC_LINK}
  386. {$ELSE}
  387. {$IFDEF DYNAMIC_LINK}
  388. var
  389.   _VerFindFile: Pointer;
  390. function VerFindFile;
  391. begin
  392.   GetProcedureAddress(_VerFindFile, Version, 'VerFindFileA');
  393.   asm
  394.     mov esp, ebp
  395.     pop ebp
  396.     jmp [_VerFindFile]
  397.   end;
  398. end;
  399. {$ELSE}
  400. function VerFindFile; external Version name 'VerFindFileA';
  401. {$ENDIF DYNAMIC_LINK}
  402. {$ENDIF}
  403. {$IFDEF DYNAMIC_LINK}
  404. var
  405.   _VerInstallFileA: Pointer;
  406. function VerInstallFileA;
  407. begin
  408.   GetProcedureAddress(_VerInstallFileA, Version, 'VerInstallFileA');
  409.   asm
  410.     mov esp, ebp
  411.     pop ebp
  412.     jmp [_VerInstallFileA]
  413.   end;
  414. end;
  415. {$ELSE}
  416. function VerInstallFileA; external Version name 'VerInstallFileA';
  417. {$ENDIF DYNAMIC_LINK}
  418. {$IFDEF DYNAMIC_LINK}
  419. var
  420.   _VerInstallFileW: Pointer;
  421. function VerInstallFileW;
  422. begin
  423.   GetProcedureAddress(_VerInstallFileW, Version, 'VerInstallFileW');
  424.   asm
  425.     mov esp, ebp
  426.     pop ebp
  427.     jmp [_VerInstallFileW]
  428.   end;
  429. end;
  430. {$ELSE}
  431. function VerInstallFileW; external Version name 'VerInstallFileW';
  432. {$ENDIF DYNAMIC_LINK}
  433. {$IFDEF UNICODE}
  434. {$IFDEF DYNAMIC_LINK}
  435. var
  436.   _VerInstallFile: Pointer;
  437. function VerInstallFile;
  438. begin
  439.   GetProcedureAddress(_VerInstallFile, Version, 'VerInstallFileW');
  440.   asm
  441.     mov esp, ebp
  442.     pop ebp
  443.     jmp [_VerInstallFile]
  444.   end;
  445. end;
  446. {$ELSE}
  447. function VerInstallFile; external Version name 'VerInstallFileW';
  448. {$ENDIF DYNAMIC_LINK}
  449. {$ELSE}
  450. {$IFDEF DYNAMIC_LINK}
  451. var
  452.   _VerInstallFile: Pointer;
  453. function VerInstallFile;
  454. begin
  455.   GetProcedureAddress(_VerInstallFile, Version, 'VerInstallFileA');
  456.   asm
  457.     mov esp, ebp
  458.     pop ebp
  459.     jmp [_VerInstallFile]
  460.   end;
  461. end;
  462. {$ELSE}
  463. function VerInstallFile; external Version name 'VerInstallFileA';
  464. {$ENDIF DYNAMIC_LINK}
  465. {$ENDIF}
  466. {$IFDEF DYNAMIC_LINK}
  467. var
  468.   _GetFileVersionInfoSizeA: Pointer;
  469. function GetFileVersionInfoSizeA;
  470. begin
  471.   GetProcedureAddress(_GetFileVersionInfoSizeA, Version, 'GetFileVersionInfoSizeA');
  472.   asm
  473.     mov esp, ebp
  474.     pop ebp
  475.     jmp [_GetFileVersionInfoSizeA]
  476.   end;
  477. end;
  478. {$ELSE}
  479. function GetFileVersionInfoSizeA; external Version name 'GetFileVersionInfoSizeA';
  480. {$ENDIF DYNAMIC_LINK}
  481. {$IFDEF DYNAMIC_LINK}
  482. var
  483.   _GetFileVersionInfoSizeW: Pointer;
  484. function GetFileVersionInfoSizeW;
  485. begin
  486.   GetProcedureAddress(_GetFileVersionInfoSizeW, Version, 'GetFileVersionInfoSizeW');
  487.   asm
  488.     mov esp, ebp
  489.     pop ebp
  490.     jmp [_GetFileVersionInfoSizeW]
  491.   end;
  492. end;
  493. {$ELSE}
  494. function GetFileVersionInfoSizeW; external Version name 'GetFileVersionInfoSizeW';
  495. {$ENDIF DYNAMIC_LINK}
  496. {$IFDEF UNICODE}
  497. {$IFDEF DYNAMIC_LINK}
  498. var
  499.   _GetFileVersionInfoSize: Pointer;
  500. function GetFileVersionInfoSize;
  501. begin
  502.   GetProcedureAddress(_GetFileVersionInfoSize, Version, 'GetFileVersionInfoSizeW');
  503.   asm
  504.     mov esp, ebp
  505.     pop ebp
  506.     jmp [_GetFileVersionInfoSize]
  507.   end;
  508. end;
  509. {$ELSE}
  510. function GetFileVersionInfoSize; external Version name 'GetFileVersionInfoSizeW';
  511. {$ENDIF DYNAMIC_LINK}
  512. {$ELSE}
  513. {$IFDEF DYNAMIC_LINK}
  514. var
  515.   _GetFileVersionInfoSize: Pointer;
  516. function GetFileVersionInfoSize;
  517. begin
  518.   GetProcedureAddress(_GetFileVersionInfoSize, Version, 'GetFileVersionInfoSizeA');
  519.   asm
  520.     mov esp, ebp
  521.     pop ebp
  522.     jmp [_GetFileVersionInfoSize]
  523.   end;
  524. end;
  525. {$ELSE}
  526. function GetFileVersionInfoSize; external Version name 'GetFileVersionInfoSizeA';
  527. {$ENDIF DYNAMIC_LINK}
  528. {$ENDIF}
  529. {$IFDEF DYNAMIC_LINK}
  530. var
  531.   _GetFileVersionInfoA: Pointer;
  532. function GetFileVersionInfoA;
  533. begin
  534.   GetProcedureAddress(_GetFileVersionInfoA, Version, 'GetFileVersionInfoA');
  535.   asm
  536.     mov esp, ebp
  537.     pop ebp
  538.     jmp [_GetFileVersionInfoA]
  539.   end;
  540. end;
  541. {$ELSE}
  542. function GetFileVersionInfoA; external Version name 'GetFileVersionInfoA';
  543. {$ENDIF DYNAMIC_LINK}
  544. {$IFDEF DYNAMIC_LINK}
  545. var
  546.   _GetFileVersionInfoW: Pointer;
  547. function GetFileVersionInfoW;
  548. begin
  549.   GetProcedureAddress(_GetFileVersionInfoW, Version, 'GetFileVersionInfoW');
  550.   asm
  551.     mov esp, ebp
  552.     pop ebp
  553.     jmp [_GetFileVersionInfoW]
  554.   end;
  555. end;
  556. {$ELSE}
  557. function GetFileVersionInfoW; external Version name 'GetFileVersionInfoW';
  558. {$ENDIF DYNAMIC_LINK}
  559. {$IFDEF UNICODE}
  560. {$IFDEF DYNAMIC_LINK}
  561. var
  562.   _GetFileVersionInfo: Pointer;
  563. function GetFileVersionInfo;
  564. begin
  565.   GetProcedureAddress(_GetFileVersionInfo, Version, 'GetFileVersionInfoW');
  566.   asm
  567.     mov esp, ebp
  568.     pop ebp
  569.     jmp [_GetFileVersionInfo]
  570.   end;
  571. end;
  572. {$ELSE}
  573. function GetFileVersionInfo; external Version name 'GetFileVersionInfoW';
  574. {$ENDIF DYNAMIC_LINK}
  575. {$ELSE}
  576. {$IFDEF DYNAMIC_LINK}
  577. var
  578.   _GetFileVersionInfo: Pointer;
  579. function GetFileVersionInfo;
  580. begin
  581.   GetProcedureAddress(_GetFileVersionInfo, Version, 'GetFileVersionInfoA');
  582.   asm
  583.     mov esp, ebp
  584.     pop ebp
  585.     jmp [_GetFileVersionInfo]
  586.   end;
  587. end;
  588. {$ELSE}
  589. function GetFileVersionInfo; external Version name 'GetFileVersionInfoA';
  590. {$ENDIF DYNAMIC_LINK}
  591. {$ENDIF}
  592. {$IFDEF DYNAMIC_LINK}
  593. var
  594.   _VerLanguageNameA: Pointer;
  595. function VerLanguageNameA;
  596. begin
  597.   GetProcedureAddress(_VerLanguageNameA, Version, 'VerLanguageNameA');
  598.   asm
  599.     mov esp, ebp
  600.     pop ebp
  601.     jmp [_VerLanguageNameA]
  602.   end;
  603. end;
  604. {$ELSE}
  605. function VerLanguageNameA; external Version name 'VerLanguageNameA';
  606. {$ENDIF DYNAMIC_LINK}
  607. {$IFDEF DYNAMIC_LINK}
  608. var
  609.   _VerLanguageNameW: Pointer;
  610. function VerLanguageNameW;
  611. begin
  612.   GetProcedureAddress(_VerLanguageNameW, Version, 'VerLanguageNameW');
  613.   asm
  614.     mov esp, ebp
  615.     pop ebp
  616.     jmp [_VerLanguageNameW]
  617.   end;
  618. end;
  619. {$ELSE}
  620. function VerLanguageNameW; external Version name 'VerLanguageNameW';
  621. {$ENDIF DYNAMIC_LINK}
  622. {$IFDEF UNICODE}
  623. {$IFDEF DYNAMIC_LINK}
  624. var
  625.   _VerLanguageName: Pointer;
  626. function VerLanguageName;
  627. begin
  628.   GetProcedureAddress(_VerLanguageName, Version, 'VerLanguageNameW');
  629.   asm
  630.     mov esp, ebp
  631.     pop ebp
  632.     jmp [_VerLanguageName]
  633.   end;
  634. end;
  635. {$ELSE}
  636. function VerLanguageName; external Version name 'VerLanguageNameW';
  637. {$ENDIF DYNAMIC_LINK}
  638. {$ELSE}
  639. {$IFDEF DYNAMIC_LINK}
  640. var
  641.   _VerLanguageName: Pointer;
  642. function VerLanguageName;
  643. begin
  644.   GetProcedureAddress(_VerLanguageName, Version, 'VerLanguageNameA');
  645.   asm
  646.     mov esp, ebp
  647.     pop ebp
  648.     jmp [_VerLanguageName]
  649.   end;
  650. end;
  651. {$ELSE}
  652. function VerLanguageName; external Version name 'VerLanguageNameA';
  653. {$ENDIF DYNAMIC_LINK}
  654. {$ENDIF}
  655. {$IFDEF DYNAMIC_LINK}
  656. var
  657.   _VerQueryValueA: Pointer;
  658. function VerQueryValueA;
  659. begin
  660.   GetProcedureAddress(_VerQueryValueA, Version, 'VerQueryValueA');
  661.   asm
  662.     mov esp, ebp
  663.     pop ebp
  664.     jmp [_VerQueryValueA]
  665.   end;
  666. end;
  667. {$ELSE}
  668. function VerQueryValueA; external Version name 'VerQueryValueA';
  669. {$ENDIF DYNAMIC_LINK}
  670. {$IFDEF DYNAMIC_LINK}
  671. var
  672.   _VerQueryValueW: Pointer;
  673. function VerQueryValueW;
  674. begin
  675.   GetProcedureAddress(_VerQueryValueW, Version, 'VerQueryValueW');
  676.   asm
  677.     mov esp, ebp
  678.     pop ebp
  679.     jmp [_VerQueryValueW]
  680.   end;
  681. end;
  682. {$ELSE}
  683. function VerQueryValueW; external Version name 'VerQueryValueW';
  684. {$ENDIF DYNAMIC_LINK}
  685. {$IFDEF UNICODE}
  686. {$IFDEF DYNAMIC_LINK}
  687. var
  688.   _VerQueryValue: Pointer;
  689. function VerQueryValue;
  690. begin
  691.   GetProcedureAddress(_VerQueryValue, Version, 'VerQueryValueW');
  692.   asm
  693.     mov esp, ebp
  694.     pop ebp
  695.     jmp [_VerQueryValue]
  696.   end;
  697. end;
  698. {$ELSE}
  699. function VerQueryValue; external Version name 'VerQueryValueW';
  700. {$ENDIF DYNAMIC_LINK}
  701. {$ELSE}
  702. {$IFDEF DYNAMIC_LINK}
  703. var
  704.   _VerQueryValue: Pointer;
  705. function VerQueryValue;
  706. begin
  707.   GetProcedureAddress(_VerQueryValue, Version, 'VerQueryValueA');
  708.   asm
  709.     mov esp, ebp
  710.     pop ebp
  711.     jmp [_VerQueryValue]
  712.   end;
  713. end;
  714. {$ELSE}
  715. function VerQueryValue; external Version name 'VerQueryValueA';
  716. {$ENDIF DYNAMIC_LINK}
  717. {$ENDIF}
  718. end.