|
13 | 13 | ; ..............: Jan. 07, 2014 - v0.2 - Unicode and x64 version. Return an object, not anymore a string.
|
14 | 14 | ; ----------------------------------------------------------------------------------------------------------------------
|
15 | 15 | FileVerInfo(sFile, sVerStr:="") {
|
16 |
| - Static LANGUAGES := "0401:Arabic|0415:Polish|0402:Bulgarian|0416:Portuguese (Brazil)|0403:Catalan|" |
17 |
| - . "0417:Rhaeto-Romanic|0404:Traditional Chinese|0418:Romanian|0405:Czech|0419:Russian|" |
18 |
| - . "0406:Danish|041A:Croato-Serbian (Latin)|0407:German|041B:Slovak|0408:Greek|041C:Albanian|" |
19 |
| - . "0409:U.S. English|041D:Swedish|040A:Castilian Spanish|041E:Thai|040B:Finnish|041F:Turkish|" |
20 |
| - . "040C:French|0420:Urdu|040D:Hebrew|0421:Bahasa|040E:Hungarian|0804:Simplified Chinese|" |
21 |
| - . "040F:Icelandic|0807:Swiss German|0410:Italian|0809:U.K. English|0411:Japanese|" |
22 |
| - . "080A:Spanish (Mexico)|0412:Korean|080C:Belgian French|0413:Dutch|0C0C:Canadian French|" |
23 |
| - . "0414:Norwegian ? Bokmal|100C:Swiss French|0810:Swiss Italian|0816:Portuguese (Portugal)|" |
24 |
| - . "0813:Belgian Dutch|081A:Serbo-Croatian (Cyrillic)|0814:Norwegian ? Nynorsk" |
25 |
| - , CODEPAGES := "0000:7-bit ASCII|03A4:Japan (Shift ? JIS X-0208)|03B5:Korea (Shift ? KSC 5601)|" |
26 |
| - . "03B6:Taiwan (Big5)|04B0:Unicode|04E2:Latin-2 (Eastern European)|04E3:Cyrillic|" |
27 |
| - . "04E4:Multilingual|04E5:Greek|04E6:Turkish|04E7:Hebrew|04E8:Arabic" |
| 16 | + Static LANGUAGES := "0401:Arabic|0415:Polish|0402:Bulgarian|0416:Portuguese (Brazil)|0403:Catalan|0417:Rhaeto-Roman" |
| 17 | + . "ic|0404:Traditional Chinese|0418:Romanian|0405:Czech|0419:Russian|0406:Danish|041A:Croato-Serb" |
| 18 | + . "ian (Latin)|0407:German|041B:Slovak|0408:Greek|041C:Albanian|0409:U.S. English|041D:Swedish|04" |
| 19 | + . "0A:Castilian Spanish|041E:Thai|040B:Finnish|041F:Turkish|040C:French|0420:Urdu|040D:Hebrew|042" |
| 20 | + . "1:Bahasa|040E:Hungarian|0804:Simplified Chinese|040F:Icelandic|0807:Swiss German|0410:Italian|" |
| 21 | + . "0809:U.K. English|0411:Japanese|080A:Spanish (Mexico)|0412:Korean|080C:Belgian French|0413:Dut" |
| 22 | + . "ch|0C0C:Canadian French|0414:Norwegian ? Bokmal|100C:Swiss French|0810:Swiss Italian|0816:Port" |
| 23 | + . "uguese (Portugal)|0813:Belgian Dutch|081A:Serbo-Croatian (Cyrillic)|0814:Norwegian ? Nynorsk" |
| 24 | + , CODEPAGES := "0000:7-bit ASCII|03A4:Japan (Shift ? JIS X-0208)|03B5:Korea (Shift ? KSC 5601)|03B6:Taiwan (Bi" |
| 25 | + . "g5)|04B0:Unicode|04E2:Latin-2 (Eastern European)|04E3:Cyrillic|04E4:Multilingual|04E5:Greek|04" |
| 26 | + . "E6:Turkish|04E7:Hebrew|04E8:Arabic" |
| 27 | + , VERSTRING := "Comments|CompanyName|FileDescription|FileVersion|InternalName|LegalCopyright|LegalTrademarks|O" |
| 28 | + . "riginalFilename|ProductName|ProductVersion|PrivateBuild|SpecialBuild" |
| 29 | + |
28 | 30 |
|
29 | 31 | If ( sVerStr == "" )
|
30 |
| - sVerStr := "Comments|CompanyName|FileDescription|FileVersion|InternalName|LegalCopyright|LegalTrademarks|" |
31 |
| - . "OriginalFilename|ProductName|ProductVersion|PrivateBuild|SpecialBuild" |
32 |
| - |
| 32 | + sVerStr := VERSTRING |
| 33 | + |
33 | 34 | If ( !szBuf := DllCall( "Version.dll\GetFileVersionInfoSize", Str,sFile, Ptr,0 ) )
|
34 |
| - Return 0 |
| 35 | + Return 0, ErrorLevel := "GetFileVersionInfoSize error`nLast error = " A_LastError |
35 | 36 |
|
36 | 37 | VarSetCapacity(cBuf, szBuf, 0)
|
37 | 38 | If ( !DllCall( "Version.dll\GetFileVersionInfo", Str,sFile, UInt,0, UInt,szBuf, Ptr,&cBuf ) )
|
38 |
| - Return 0 |
| 39 | + Return 0, ErrorLevel := "GetFileVersionInfo error`nLast error = " A_LastError |
39 | 40 |
|
40 | 41 | If ( !DllCall( "Version.dll\VerQueryValue", Ptr,&cBuf, Str,"\\VarFileInfo\\Translation", PtrP,addrVerBuf
|
41 | 42 | , PtrP,szVerBuf ) )
|
42 |
| - Return 0 |
| 43 | + Return 0, ErrorLevel := "VerQueryValue error" |
43 | 44 |
|
44 |
| - VarSetCapacity(sLangCp, 18) |
| 45 | + VarSetCapacity( sLangCp, 18 ) |
45 | 46 | DllCall( "msvcrt\swprintf", Str,sLangCp, Str,"%04X%04X", UShort,NumGet(addrVerBuf+0,"UShort")
|
46 | 47 | , UShort,NumGet(addrVerBuf+2,"UShort") )
|
47 | 48 |
|
48 | 49 | objVersions := Object()
|
49 | 50 | Loop % szVerBuf/4 ; LANGUAGE + CODEPAGE = 4 byte
|
50 | 51 | {
|
51 |
| - RegExMatch(LANGUAGES, "S)" SubStr(sLangCp, 1, 4) ":([^\|]*)", OutLang) |
52 |
| - RegExMatch(CODEPAGES, "S)" SubStr(sLangCp, 5, 4) ":([^\|]*)", OutCode) |
| 52 | + RegExMatch( LANGUAGES, "S)" SubStr( sLangCp, 1, 4 ) ":([^\|]*)", OutLang ) |
| 53 | + RegExMatch( CODEPAGES, "S)" SubStr( sLangCp, 5, 4 ) ":([^\|]*)", OutCode ) |
53 | 54 | objFileVer := { "Language": OutLang1, "Codepage": OutCode1 }
|
54 | 55 | Loop, PARSE, sVerStr, |
|
55 | 56 | If ( A_LoopField )
|
56 | 57 | DllCall( "Version.dll\VerQueryValue", Ptr,&cBuf, Str,"\\StringFileInfo\\" sLangCp "\\" A_LoopField
|
57 | 58 | , PtrP,addrVerBuf, PtrP,szVerBuf )
|
58 |
| - , objFileVer[A_LoopField] := StrGet(addrVerBuf, szVerBuf, "UTF-16") |
| 59 | + , objFileVer[A_LoopField] := StrGet( addrVerBuf, szVerBuf, "UTF-16" ) |
59 | 60 | objVersions[A_Index] := objFileVer, objFileVer := ""
|
60 | 61 | }
|
61 | 62 | Return objVersions
|
|
0 commit comments