;Autor: akee ;http://www.purebasic.fr/english/viewtopic.php?p=324893#p324893 EnableExplicit Define File$ Define x Define y$ Enumeration #FVI_FileVersion = $0001 #FVI_FileDescription = $0002 #FVI_LegalCopyright = $0004 #FVI_InternalName = $0008 #FVI_OriginalFilename = $0010 #FVI_ProductName = $0020 #FVI_ProductVersion = $0040 #FVI_CompanyName = $0080 #FVI_LegalTrademarks = $0100 #FVI_SpecialBuild = $0200 #FVI_PrivateBuild = $0400 #FVI_Comments = $0800 #FVI_Language = $1000 #FVI_Email = $1001 #FVI_Website = $1002 #FVI_Special = $1003 EndEnumeration Procedure.s GetFileVersionInfo_ElementName(ElementFlag) Protected TempString$ = "" Select ElementFlag Case #FVI_FileVersion TempString$ = "FileVersion" Case #FVI_FileDescription TempString$ = "FileDescription" Case #FVI_LegalCopyright TempString$ = "LegalCopyright" Case #FVI_InternalName TempString$ = "InternalName" Case #FVI_OriginalFilename TempString$ = "OriginalFilename" Case #FVI_ProductName TempString$ = "ProductName" Case #FVI_ProductVersion TempString$ = "ProductVersion" Case #FVI_CompanyName TempString$ = "CompanyName" Case #FVI_LegalTrademarks TempString$ = "LegalTrademarks" Case #FVI_SpecialBuild TempString$ = "SpecialBuild" Case #FVI_PrivateBuild TempString$ = "PrivateBuild" Case #FVI_Comments TempString$ = "Comments" Case #FVI_Language TempString$ = "Language" Case #FVI_Email TempString$ = "Email" Case #FVI_Website TempString$ = "Website" Case #FVI_Special TempString$ = "Special" EndSelect ProcedureReturn TempString$ EndProcedure CompilerIf #PB_Compiler_Unicode Prototype.l GetFileVersionInfoSizeW(lptstrFilename.p-unicode, lpdwHandle.l) Prototype.l GetFileVersionInfoW(lptstrFilename.p-unicode, dwHandle.l, dwLen.l, lpData.l) Prototype.l VerQueryValueW(pBlock.l, lpSubBlock.p-unicode, lplpBuffer.l, puLen.w) Prototype.l VerLanguageNameW(wLang.l, szLang.p-unicode, cchLang.l) CompilerElse Prototype.l GetFileVersionInfoSizeA(lptstrFilename.p-ascii, lpdwHandle.l) Prototype.l GetFileVersionInfoA(lptstrFilename.p-ascii, dwHandle.l, dwLen.l, lpData.l) Prototype.l VerQueryValueA(pBlock.l, lpSubBlock.p-ascii, lplpBuffer.l, puLen.w) Prototype.l VerLanguageNameA(wLang.l, szLang.p-ascii, cchLang.l) CompilerEndIf Procedure.s GetFileVersionInfoString(lptstrFilename$, FVI_Flag) Protected TempString$ = "", TempPtr, TempBlkSize, *TempBlk Protected TempLibHandle, TempBuff, TempBuffSize, TempCPLI$, TempLangSize = 128, TempLang$ = Space(TempLangSize) Protected GetFileVersionInfoSize.GetFileVersionInfoSizeA Protected GetFileVersionInfo.GetFileVersionInfoA Protected VerQueryValue.VerQueryValueA Protected VerLanguageName.VerLanguageNameA If FileSize(lptstrFilename$) >= 0 TempLibHandle = OpenLibrary(#PB_Any, "version.dll") If TempLibHandle CompilerIf #PB_Compiler_Unicode GetFileVersionInfoSize.GetFileVersionInfoSizeW = GetFunction(TempLibHandle, "GetFileVersionInfoSizeW") GetFileVersionInfo.GetFileVersionInfoW = GetFunction(TempLibHandle, "GetFileVersionInfoW") VerQueryValue.VerQueryValueW = GetFunction(TempLibHandle, "VerQueryValueW") VerLanguageName.VerLanguageNameW = GetFunction(TempLibHandle, "VerLanguageNameW") CompilerElse GetFileVersionInfoSize.GetFileVersionInfoSizeA = GetFunction(TempLibHandle, "GetFileVersionInfoSizeA") GetFileVersionInfo.GetFileVersionInfoA = GetFunction(TempLibHandle, "GetFileVersionInfoA") VerQueryValue.VerQueryValueA = GetFunction(TempLibHandle, "VerQueryValueA") VerLanguageName.VerLanguageNameA = GetFunction(TempLibHandle, "VerLanguageNameA") CompilerEndIf TempBlkSize = GetFileVersionInfoSize(lptstrFilename$, @TempPtr) If TempBlkSize > 0 *TempBlk = AllocateMemory(TempBlkSize) If *TempBlk > 0 If GetFileVersionInfo(lptstrFilename$, 0, TempBlkSize, *TempBlk) If VerQueryValue(*TempBlk, "\\VarFileInfo\\Translation", @TempBuff, @TempBuffSize) TempCPLI$ = RSet(Hex(PeekW(TempBuff)), 4, "0") + RSet(Hex(PeekW(TempBuff + 2)), 4, "0") VerLanguageName(PeekW(TempBuff), TempLang$, TempLangSize) EndIf If VerQueryValue(*TempBlk, "\\StringFileInfo\\" + TempCPLI$ + "\\" + GetFileVersionInfo_ElementName(FVI_Flag), @TempBuff, @TempBuffSize) TempString$ = PeekS(TempBuff, TempBuffSize) EndIf If FVI_Flag = #FVI_Language TempString$ = TempLang$ EndIf EndIf EndIf FreeMemory(*TempBlk) EndIf EndIf CloseLibrary(TempLibHandle) EndIf ProcedureReturn(TempString$) EndProcedure File$ = GetEnvironmentVariable("windir") + "\explorer.exe" Debug GetFileVersionInfo_ElementName(#FVI_FileVersion) + " : " + GetFileVersionInfoString(File$, #FVI_FileVersion) Debug GetFileVersionInfo_ElementName(#FVI_FileDescription) + " : " + GetFileVersionInfoString(File$, #FVI_FileDescription) Debug GetFileVersionInfo_ElementName(#FVI_LegalCopyright) + " : " + GetFileVersionInfoString(File$, #FVI_LegalCopyright) Debug GetFileVersionInfo_ElementName(#FVI_InternalName) + " : " + GetFileVersionInfoString(File$, #FVI_InternalName) Debug GetFileVersionInfo_ElementName(#FVI_OriginalFilename) + " : " + GetFileVersionInfoString(File$, #FVI_OriginalFilename) Debug GetFileVersionInfo_ElementName(#FVI_ProductName) + " : " + GetFileVersionInfoString(File$, #FVI_ProductName) Debug GetFileVersionInfo_ElementName(#FVI_ProductVersion) + " : " + GetFileVersionInfoString(File$, #FVI_ProductVersion) Debug GetFileVersionInfo_ElementName(#FVI_CompanyName) + " : " + GetFileVersionInfoString(File$, #FVI_CompanyName) Debug GetFileVersionInfo_ElementName(#FVI_LegalTrademarks) + " : " + GetFileVersionInfoString(File$, #FVI_LegalTrademarks) Debug GetFileVersionInfo_ElementName(#FVI_SpecialBuild) + " : " + GetFileVersionInfoString(File$, #FVI_SpecialBuild) Debug GetFileVersionInfo_ElementName(#FVI_PrivateBuild) + " : " + GetFileVersionInfoString(File$, #FVI_PrivateBuild) Debug GetFileVersionInfo_ElementName(#FVI_Comments) + " : " + GetFileVersionInfoString(File$, #FVI_Comments) Debug GetFileVersionInfo_ElementName(#FVI_Language) + " : " + GetFileVersionInfoString(File$, #FVI_Language) For x = 0 To $1100 y$ = Trim(GetFileVersionInfoString(File$, x)) If y$ <> "" Debug Hex(x) + " " + GetFileVersionInfo_ElementName(x) + " : " + GetFileVersionInfoString(File$, x) EndIf Next ; IDE Options = PureBasic 5.31 (Windows - x64) ; CursorPosition = 2 ; Folding = - ; EnableUnicode ; EnableXP ; EnableUser ; EnableCompileCount = 0 ; EnableBuildCount = 0