{******************************************************************************} { } { Windows Version API interface Unit for Object Pascal } { } { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft } { Corporation. All Rights Reserved. } { } { The original file is: winver.h, released June 2000. The original Pascal } { code is: WinVer.pas, released December 2000. The initial developer of the } { Pascal code is Marcel van Brakel (brakelm att chello dott nl). } { } { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 } { Marcel van Brakel. All Rights Reserved. } { } { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) } { } { You may retrieve the latest version of this file at the Project JEDI } { APILIB home page, located at http://jedi-apilib.sourceforge.net } { } { The contents of this file are used with permission, subject to the Mozilla } { Public License Version 1.1 (the "License"); you may not use this file except } { in compliance with the License. You may obtain a copy of the License at } { http://www.mozilla.org/MPL/MPL-1.1.html } { } { Software distributed under the License is distributed on an "AS IS" basis, } { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for } { the specific language governing rights and limitations under the License. } { } { Alternatively, the contents of this file may be used under the terms of the } { GNU Lesser General Public License (the "LGPL License"), in which case the } { provisions of the LGPL License are applicable instead of those above. } { If you wish to allow use of your version of this file only under the terms } { of the LGPL License and not to allow others to use your version of this file } { under the MPL, indicate your decision by deleting the provisions above and } { replace them with the notice and other provisions required by the LGPL } { License. If you do not delete the provisions above, a recipient may use } { your version of this file under either the MPL or the LGPL License. } { } { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html } { } {******************************************************************************} // $Id: JwaWinVer.pas,v 1.9 2005/09/06 16:36:51 marquardt Exp $ {$IFNDEF JWA_INCLUDEMODE} unit JwaWinVer; {$WEAKPACKAGEUNIT} {$I jediapilib.inc} interface uses JwaWinUser, JwaWinType; {$ENDIF !JWA_INCLUDEMODE} {$IFDEF JWA_INTERFACESECTION} {$HPPEMIT ''} {$HPPEMIT '#include "WinVer.h"'} {$HPPEMIT ''} const // RT_VERSION = MAKEINTRESOURCE(16); // ----- Symbols ----- VS_FILE_INFO = RT_VERSION; {$EXTERNALSYM VS_FILE_INFO} VS_VERSION_INFO = 1; {$EXTERNALSYM VS_VERSION_INFO} VS_USER_DEFINED = 100; {$EXTERNALSYM VS_USER_DEFINED} // ----- VS_VERSION.dwFileFlags ----- VS_FFI_SIGNATURE = $FEEF04BD; {$EXTERNALSYM VS_FFI_SIGNATURE} VS_FFI_STRUCVERSION = $00010000; {$EXTERNALSYM VS_FFI_STRUCVERSION} VS_FFI_FILEFLAGSMASK = $0000003F; {$EXTERNALSYM VS_FFI_FILEFLAGSMASK} // ----- VS_VERSION.dwFileFlags ----- VS_FF_DEBUG = $00000001; {$EXTERNALSYM VS_FF_DEBUG} VS_FF_PRERELEASE = $00000002; {$EXTERNALSYM VS_FF_PRERELEASE} VS_FF_PATCHED = $00000004; {$EXTERNALSYM VS_FF_PATCHED} VS_FF_PRIVATEBUILD = $00000008; {$EXTERNALSYM VS_FF_PRIVATEBUILD} VS_FF_INFOINFERRED = $00000010; {$EXTERNALSYM VS_FF_INFOINFERRED} VS_FF_SPECIALBUILD = $00000020; {$EXTERNALSYM VS_FF_SPECIALBUILD} // ----- VS_VERSION.dwFileOS ----- VOS_UNKNOWN = $00000000; {$EXTERNALSYM VOS_UNKNOWN} VOS_DOS = $00010000; {$EXTERNALSYM VOS_DOS} VOS_OS216 = $00020000; {$EXTERNALSYM VOS_OS216} VOS_OS232 = $00030000; {$EXTERNALSYM VOS_OS232} VOS_NT = $00040000; {$EXTERNALSYM VOS_NT} VOS_WINCE = $00050000; {$EXTERNALSYM VOS_WINCE} VOS__BASE = $00000000; {$EXTERNALSYM VOS__BASE} VOS__WINDOWS16 = $00000001; {$EXTERNALSYM VOS__WINDOWS16} VOS__PM16 = $00000002; {$EXTERNALSYM VOS__PM16} VOS__PM32 = $00000003; {$EXTERNALSYM VOS__PM32} VOS__WINDOWS32 = $00000004; {$EXTERNALSYM VOS__WINDOWS32} VOS_DOS_WINDOWS16 = $00010001; {$EXTERNALSYM VOS_DOS_WINDOWS16} VOS_DOS_WINDOWS32 = $00010004; {$EXTERNALSYM VOS_DOS_WINDOWS32} VOS_OS216_PM16 = $00020002; {$EXTERNALSYM VOS_OS216_PM16} VOS_OS232_PM32 = $00030003; {$EXTERNALSYM VOS_OS232_PM32} VOS_NT_WINDOWS32 = $00040004; {$EXTERNALSYM VOS_NT_WINDOWS32} // ----- VS_VERSION.dwFileType ----- VFT_UNKNOWN = $00000000; {$EXTERNALSYM VFT_UNKNOWN} VFT_APP = $00000001; {$EXTERNALSYM VFT_APP} VFT_DLL = $00000002; {$EXTERNALSYM VFT_DLL} VFT_DRV = $00000003; {$EXTERNALSYM VFT_DRV} VFT_FONT = $00000004; {$EXTERNALSYM VFT_FONT} VFT_VXD = $00000005; {$EXTERNALSYM VFT_VXD} VFT_STATIC_LIB = $00000007; {$EXTERNALSYM VFT_STATIC_LIB} // ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV ----- VFT2_UNKNOWN = $00000000; {$EXTERNALSYM VFT2_UNKNOWN} VFT2_DRV_PRINTER = $00000001; {$EXTERNALSYM VFT2_DRV_PRINTER} VFT2_DRV_KEYBOARD = $00000002; {$EXTERNALSYM VFT2_DRV_KEYBOARD} VFT2_DRV_LANGUAGE = $00000003; {$EXTERNALSYM VFT2_DRV_LANGUAGE} VFT2_DRV_DISPLAY = $00000004; {$EXTERNALSYM VFT2_DRV_DISPLAY} VFT2_DRV_MOUSE = $00000005; {$EXTERNALSYM VFT2_DRV_MOUSE} VFT2_DRV_NETWORK = $00000006; {$EXTERNALSYM VFT2_DRV_NETWORK} VFT2_DRV_SYSTEM = $00000007; {$EXTERNALSYM VFT2_DRV_SYSTEM} VFT2_DRV_INSTALLABLE = $00000008; {$EXTERNALSYM VFT2_DRV_INSTALLABLE} VFT2_DRV_SOUND = $00000009; {$EXTERNALSYM VFT2_DRV_SOUND} VFT2_DRV_COMM = $0000000A; {$EXTERNALSYM VFT2_DRV_COMM} VFT2_DRV_INPUTMETHOD = $0000000B; {$EXTERNALSYM VFT2_DRV_INPUTMETHOD} VFT2_DRV_VERSIONED_PRINTER = $0000000C; {$EXTERNALSYM VFT2_DRV_VERSIONED_PRINTER} // ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT ----- VFT2_FONT_RASTER = $00000001; {$EXTERNALSYM VFT2_FONT_RASTER} VFT2_FONT_VECTOR = $00000002; {$EXTERNALSYM VFT2_FONT_VECTOR} VFT2_FONT_TRUETYPE = $00000003; {$EXTERNALSYM VFT2_FONT_TRUETYPE} // ----- VerFindFile() flags ----- VFFF_ISSHAREDFILE = $0001; {$EXTERNALSYM VFFF_ISSHAREDFILE} VFF_CURNEDEST = $0001; {$EXTERNALSYM VFF_CURNEDEST} VFF_FILEINUSE = $0002; {$EXTERNALSYM VFF_FILEINUSE} VFF_BUFFTOOSMALL = $0004; {$EXTERNALSYM VFF_BUFFTOOSMALL} // ----- VerInstallFile() flags ----- VIFF_FORCEINSTALL = $0001; {$EXTERNALSYM VIFF_FORCEINSTALL} VIFF_DONTDELETEOLD = $0002; {$EXTERNALSYM VIFF_DONTDELETEOLD} VIF_TEMPFILE = $00000001; {$EXTERNALSYM VIF_TEMPFILE} VIF_MISMATCH = $00000002; {$EXTERNALSYM VIF_MISMATCH} VIF_SRCOLD = $00000004; {$EXTERNALSYM VIF_SRCOLD} VIF_DIFFLANG = $00000008; {$EXTERNALSYM VIF_DIFFLANG} VIF_DIFFCODEPG = $00000010; {$EXTERNALSYM VIF_DIFFCODEPG} VIF_DIFFTYPE = $00000020; {$EXTERNALSYM VIF_DIFFTYPE} VIF_WRITEPROT = $00000040; {$EXTERNALSYM VIF_WRITEPROT} VIF_FILEINUSE = $00000080; {$EXTERNALSYM VIF_FILEINUSE} VIF_OUTOFSPACE = $00000100; {$EXTERNALSYM VIF_OUTOFSPACE} VIF_ACCESSVIOLATION = $00000200; {$EXTERNALSYM VIF_ACCESSVIOLATION} VIF_SHARINGVIOLATION = $00000400; {$EXTERNALSYM VIF_SHARINGVIOLATION} VIF_CANNOTCREATE = $00000800; {$EXTERNALSYM VIF_CANNOTCREATE} VIF_CANNOTDELETE = $00001000; {$EXTERNALSYM VIF_CANNOTDELETE} VIF_CANNOTRENAME = $00002000; {$EXTERNALSYM VIF_CANNOTRENAME} VIF_CANNOTDELETECUR = $00004000; {$EXTERNALSYM VIF_CANNOTDELETECUR} VIF_OUTOFMEMORY = $00008000; {$EXTERNALSYM VIF_OUTOFMEMORY} VIF_CANNOTREADSRC = $00010000; {$EXTERNALSYM VIF_CANNOTREADSRC} VIF_CANNOTREADDST = $00020000; {$EXTERNALSYM VIF_CANNOTREADDST} VIF_BUFFTOOSMALL = $00040000; {$EXTERNALSYM VIF_BUFFTOOSMALL} VIF_CANNOTLOADLZ32 = $00080000; {$EXTERNALSYM VIF_CANNOTLOADLZ32} VIF_CANNOTLOADCABINET = $00100000; {$EXTERNALSYM VIF_CANNOTLOADCABINET} // ----- Types and structures ----- type PVSFixedFileInfo = ^VS_FIXEDFILEINFO; tagVS_FIXEDFILEINFO = record dwSignature: DWORD; // e.g. 0xfeef04bd dwStrucVersion: DWORD; // e.g. 0x00000042 = "0.42" dwFileVersionMS: DWORD; // e.g. 0x00030075 = "3.75" dwFileVersionLS: DWORD; // e.g. 0x00000031 = "0.31" dwProductVersionMS: DWORD; // e.g. 0x00030010 = "3.10" dwProductVersionLS: DWORD; // e.g. 0x00000031 = "0.31" dwFileFlagsMask: DWORD; // = 0x3F for version "0.42" dwFileFlags: DWORD; // e.g. VFF_DEBUG | VFF_PRERELEASE dwFileOS: DWORD; // e.g. VOS_DOS_WINDOWS16 dwFileType: DWORD; // e.g. VFT_DRIVER dwFileSubtype: DWORD; // e.g. VFT2_DRV_KEYBOARD dwFileDateMS: DWORD; // e.g. 0 dwFileDateLS: DWORD; // e.g. 0 end; {$EXTERNALSYM tagVS_FIXEDFILEINFO} VS_FIXEDFILEINFO = tagVS_FIXEDFILEINFO; {$EXTERNALSYM VS_FIXEDFILEINFO} TVSFixedFileInfo = VS_FIXEDFILEINFO; // ----- Function prototypes ----- function VerFindFileA(uFlags: DWORD; szFileName, szWinDir, szAppDir, szCurDir: LPSTR; var lpuCurDirLen: UINT; szDestDir: LPSTR; var lpuDestDirLen: UINT): DWORD; stdcall; {$EXTERNALSYM VerFindFileA} function VerFindFileW(uFlags: DWORD; szFileName, szWinDir, szAppDir, szCurDir: LPWSTR; var lpuCurDirLen: UINT; szDestDir: LPWSTR; var lpuDestDirLen: UINT): DWORD; stdcall; {$EXTERNALSYM VerFindFileW} function VerFindFile(uFlags: DWORD; szFileName, szWinDir, szAppDir, szCurDir: LPTSTR; var lpuCurDirLen: UINT; szDestDir: LPTSTR; var lpuDestDirLen: UINT): DWORD; stdcall; {$EXTERNALSYM VerFindFile} function VerInstallFileA(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile: LPSTR; var lpuTmpFileLen: UINT): DWORD; stdcall; {$EXTERNALSYM VerInstallFileA} function VerInstallFileW(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile: LPWSTR; var lpuTmpFileLen: UINT): DWORD; stdcall; {$EXTERNALSYM VerInstallFileW} function VerInstallFile(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile: LPTSTR; var lpuTmpFileLen: UINT): DWORD; stdcall; {$EXTERNALSYM VerInstallFile} // Returns size of version info in bytes function GetFileVersionInfoSizeA(lptstrFilename: LPCSTR; var lpdwHandle: DWORD): DWORD; stdcall; {$EXTERNALSYM GetFileVersionInfoSizeA} function GetFileVersionInfoSizeW(lptstrFilename: LPCWSTR; var lpdwHandle: DWORD): DWORD; stdcall; {$EXTERNALSYM GetFileVersionInfoSizeW} function GetFileVersionInfoSize(lptstrFilename: LPCTSTR; var lpdwHandle: DWORD): DWORD; stdcall; {$EXTERNALSYM GetFileVersionInfoSize} // Read version info into buffer function GetFileVersionInfoA(lptstrFilename: LPCSTR; dwHandle, dwLen: DWORD; lpData: LPVOID): BOOL; stdcall; {$EXTERNALSYM GetFileVersionInfoA} function GetFileVersionInfoW(lptstrFilename: LPCWSTR; dwHandle, dwLen: DWORD; lpData: LPVOID): BOOL; stdcall; {$EXTERNALSYM GetFileVersionInfoW} function GetFileVersionInfo(lptstrFilename: LPCTSTR; dwHandle, dwLen: DWORD; lpData: LPVOID): BOOL; stdcall; {$EXTERNALSYM GetFileVersionInfo} function VerLanguageNameA(wLang: DWORD; szLang: LPSTR; nSize: DWORD): DWORD; stdcall; {$EXTERNALSYM VerLanguageNameA} function VerLanguageNameW(wLang: DWORD; szLang: LPWSTR; nSize: DWORD): DWORD; stdcall; {$EXTERNALSYM VerLanguageNameW} function VerLanguageName(wLang: DWORD; szLang: LPTSTR; nSize: DWORD): DWORD; stdcall; {$EXTERNALSYM VerLanguageName} function VerQueryValueA(pBlock: LPVOID; lpSubBlock: LPSTR; var lplpBuffer: LPVOID; var puLen: UINT): BOOL; stdcall; {$EXTERNALSYM VerQueryValueA} function VerQueryValueW(pBlock: LPVOID; lpSubBlock: LPWSTR; var lplpBuffer: LPVOID; var puLen: UINT): BOOL; stdcall; {$EXTERNALSYM VerQueryValueW} function VerQueryValue(pBlock: LPVOID; lpSubBlock: LPTSTR; var lplpBuffer: LPVOID; var puLen: UINT): BOOL; stdcall; {$EXTERNALSYM VerQueryValue} {$ENDIF JWA_INTERFACESECTION} {$IFNDEF JWA_INCLUDEMODE} implementation uses JwaWinDLLNames; {$ENDIF !JWA_INCLUDEMODE} {$IFDEF JWA_IMPLEMENTATIONSECTION} {$IFDEF DYNAMIC_LINK} var _VerFindFileA: Pointer; function VerFindFileA; begin GetProcedureAddress(_VerFindFileA, versionlib, 'VerFindFileA'); asm MOV ESP, EBP POP EBP JMP [_VerFindFileA] end; end; var _VerFindFileW: Pointer; function VerFindFileW; begin GetProcedureAddress(_VerFindFileW, versionlib, 'VerFindFileW'); asm MOV ESP, EBP POP EBP JMP [_VerFindFileW] end; end; var _VerFindFile: Pointer; function VerFindFile; begin GetProcedureAddress(_VerFindFile, versionlib, 'VerFindFile' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_VerFindFile] end; end; var _VerInstallFileA: Pointer; function VerInstallFileA; begin GetProcedureAddress(_VerInstallFileA, versionlib, 'VerInstallFileA'); asm MOV ESP, EBP POP EBP JMP [_VerInstallFileA] end; end; var _VerInstallFileW: Pointer; function VerInstallFileW; begin GetProcedureAddress(_VerInstallFileW, versionlib, 'VerInstallFileW'); asm MOV ESP, EBP POP EBP JMP [_VerInstallFileW] end; end; var _VerInstallFile: Pointer; function VerInstallFile; begin GetProcedureAddress(_VerInstallFile, versionlib, 'VerInstallFile' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_VerInstallFile] end; end; var _GetFileVersionInfoSizeA: Pointer; function GetFileVersionInfoSizeA; begin GetProcedureAddress(_GetFileVersionInfoSizeA, versionlib, 'GetFileVersionInfoSizeA'); asm MOV ESP, EBP POP EBP JMP [_GetFileVersionInfoSizeA] end; end; var _GetFileVersionInfoSizeW: Pointer; function GetFileVersionInfoSizeW; begin GetProcedureAddress(_GetFileVersionInfoSizeW, versionlib, 'GetFileVersionInfoSizeW'); asm MOV ESP, EBP POP EBP JMP [_GetFileVersionInfoSizeW] end; end; var _GetFileVersionInfoSize: Pointer; function GetFileVersionInfoSize; begin GetProcedureAddress(_GetFileVersionInfoSize, versionlib, 'GetFileVersionInfoSize' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_GetFileVersionInfoSize] end; end; var _GetFileVersionInfoA: Pointer; function GetFileVersionInfoA; begin GetProcedureAddress(_GetFileVersionInfoA, versionlib, 'GetFileVersionInfoA'); asm MOV ESP, EBP POP EBP JMP [_GetFileVersionInfoA] end; end; var _GetFileVersionInfoW: Pointer; function GetFileVersionInfoW; begin GetProcedureAddress(_GetFileVersionInfoW, versionlib, 'GetFileVersionInfoW'); asm MOV ESP, EBP POP EBP JMP [_GetFileVersionInfoW] end; end; var _GetFileVersionInfo: Pointer; function GetFileVersionInfo; begin GetProcedureAddress(_GetFileVersionInfo, versionlib, 'GetFileVersionInfo' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_GetFileVersionInfo] end; end; var _VerLanguageNameA: Pointer; function VerLanguageNameA; begin GetProcedureAddress(_VerLanguageNameA, versionlib, 'VerLanguageNameA'); asm MOV ESP, EBP POP EBP JMP [_VerLanguageNameA] end; end; var _VerLanguageNameW: Pointer; function VerLanguageNameW; begin GetProcedureAddress(_VerLanguageNameW, versionlib, 'VerLanguageNameW'); asm MOV ESP, EBP POP EBP JMP [_VerLanguageNameW] end; end; var _VerLanguageName: Pointer; function VerLanguageName; begin GetProcedureAddress(_VerLanguageName, versionlib, 'VerLanguageName' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_VerLanguageName] end; end; var _VerQueryValueA: Pointer; function VerQueryValueA; begin GetProcedureAddress(_VerQueryValueA, versionlib, 'VerQueryValueA'); asm MOV ESP, EBP POP EBP JMP [_VerQueryValueA] end; end; var _VerQueryValueW: Pointer; function VerQueryValueW; begin GetProcedureAddress(_VerQueryValueW, versionlib, 'VerQueryValueW'); asm MOV ESP, EBP POP EBP JMP [_VerQueryValueW] end; end; var _VerQueryValue: Pointer; function VerQueryValue; begin GetProcedureAddress(_VerQueryValue, versionlib, 'VerQueryValue' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_VerQueryValue] end; end; {$ELSE} function VerFindFileA; external versionlib name 'VerFindFileA'; function VerFindFileW; external versionlib name 'VerFindFileW'; function VerFindFile; external versionlib name 'VerFindFile' + AWSuffix; function VerInstallFileA; external versionlib name 'VerInstallFileA'; function VerInstallFileW; external versionlib name 'VerInstallFileW'; function VerInstallFile; external versionlib name 'VerInstallFile' + AWSuffix; function GetFileVersionInfoSizeA; external versionlib name 'GetFileVersionInfoSizeA'; function GetFileVersionInfoSizeW; external versionlib name 'GetFileVersionInfoSizeW'; function GetFileVersionInfoSize; external versionlib name 'GetFileVersionInfoSize' + AWSuffix; function GetFileVersionInfoA; external versionlib name 'GetFileVersionInfoA'; function GetFileVersionInfoW; external versionlib name 'GetFileVersionInfoW'; function GetFileVersionInfo; external versionlib name 'GetFileVersionInfo' + AWSuffix; function VerLanguageNameA; external versionlib name 'VerLanguageNameA'; function VerLanguageNameW; external versionlib name 'VerLanguageNameW'; function VerLanguageName; external versionlib name 'VerLanguageName' + AWSuffix; function VerQueryValueA; external versionlib name 'VerQueryValueA'; function VerQueryValueW; external versionlib name 'VerQueryValueW'; function VerQueryValue; external versionlib name 'VerQueryValue' + AWSuffix; {$ENDIF DYNAMIC_LINK} {$ENDIF JWA_IMPLEMENTATIONSECTION} {$IFNDEF JWA_INCLUDEMODE} end. {$ENDIF !JWA_INCLUDEMODE}