$use "version.lib" $include "windowssdk.inc" TYPE VS_FIXEDFILEINFO UINT dwSignature UINT dwStrucVersion UINT dwFileVersionMS UINT dwFileVersionLS UINT dwProductVersionMS UINT dwProductVersionLS UINT dwFileFlagsMask UINT dwFileFlags UINT dwFileOS UINT dwFileType UINT dwFileSubtype UINT dwFileDateMS UINT dwFileDateLS ENDTYPE type FFINFO string filevers string prodvers string opersys string filetyp endtype openconsole FFINFO a string fname = GETSTARTPATH + "agent.exe" a=GetFixedFileInfo(fname) ?a.filevers ?a.prodvers ?a.opersys ?a.filetyp waitcon end global sub GetFixedFileInfo(string filename),FFINFO FFINFO ret UINT dwTemp UINT dwSize= GetFileVersionInfoSizeA(filename,dwTemp) POINTER pVer,lpvs UINT dwVS = 0 IF(dwSize) pVer = NEW(CHAR,dwSize) IF(GetFileVersionInfoA(filename,0,dwSize,pVer) <> 0) IF(VerQueryValueA(pVer,"\\",&lpvs,dwVS)) 'retriev the file version UINT nVerMSB= *lpvs.dwFileVersionMS UINT nVerLSB = *lpvs.dwFileVersionLS IF(nVerLSB <> 0) ret.filevers = USING("#&#&#&#",nVerMSB>>16,".",nVerMSB & 0xFFFF,"",nVerLSB>>16,"",nVerLSB & 0xFFFF) ELSE ret.filevers = USING("#&#",nVerMSB>>16,".",nVerMSB & 0xFFFF) ENDIF 'retrive the product version nVerMSB = *lpvs.dwProductVersionMS nVerLSB = *lpvs.dwProductVersionlS IF(nVerLSB <> 0) ret.prodvers = USING("#&#&#&#",nVerMSB>>16,".",nVerMSB & 0xFFFF,"",nVerLSB>>16,"",nVerLSB & 0xFFFF) ELSE ret.prodvers = USING("#&#",nVerMSB>>16,".",nVerMSB & 0xFFFF) ENDIF 'get OS uint nFileOS = *lpvs.dwFileOS select nFileOS case 0x10000'VOS_DOS ret.opersys = "MS-DOS" case 0x40000'VOS_NT ret.opersys = "Windows NT" case 0x1'VOS_WINDOWS16 ret.opersys = "Windows 16 bit" case 0x4'VOS_WINDOWS32 ret.opersys = "Windows 32 bit" case 0x20000'VOS_OS216 ret.opersys = "OS/2 16 bit" case 0x30000'VOS_OS232 ret.opersys = "OS/2 32 bit" case 0x2'VOS_PM16 ret.opersys = "Presentation Manager 16 bit" case 0x3'VOS_PM32 ret.opersys = "Presentation Manager 32 bit" case 0x10001 ret.opersys = "Windows 16 bit on MS-DOS" case 0x10004 ret.opersys = "Windows 32 bit on MS-DOS" case 0x40004 ret.opersys = "Windows 32 bit on NT" case 0x20002'VOS_PM16 ret.opersys = "Presentation Manager 16 bit on OS/2 16 bit" case 0x30003'VOS_PM32 ret.opersys = "Presentation Manager 32 bit on OS/2 32 bit" case 0'VOS_UNKNOWN ret.opersys = "Could not determine" endselect 'get filetype uint nFileType = *lpvs.dwFileType select nFileType case 0x1 ret.filetyp = "Application" case 0x2 ret.filetyp = "DLL" case 0x3 ret.filetyp = "Driver" uint nFileSubtype = *lpvs.dwFileSubtype select nFileSubtype case 0x4 ret.filetyp = "Display Driver" case 0xB ret.filetyp = "Input Driver" case 0x8 ret.filetyp = "Installable Driver" case 0x2 ret.filetyp = "Keyboard Driver" case 0x3 ret.filetyp = "Language Driver" case 0x6 ret.filetyp = "Network Driver" case 0x1 ret.filetyp = "Printer Driver" case 0x9 ret.filetyp = "Sound Driver" case 0x7 ret.filetyp = "System Driver" case 0 ret.filetyp = "Unknown Driver" case 0xA ret.filetyp = "COMM Driver" endselect case 0x4 ret.filetyp = "Font" nFileSubtype = *lpvs.dwFileSubtype select nFileSubtype case 0x1 ret.filetyp = "Raster Font" case 0x3 ret.filetyp = "TrueType Font" case 0x2 ret.filetyp = "Vector Font" case 0x0 ret.filetyp = "Unknown Font" endselect case 0x7 ret.filetyp = "Static Lib" case 0x5 ret.filetyp = "Vertual Device" endselect ENDIF DELETE pVer endif endif return ret endsub