Code: Select all
for k, v in GetFileVersionInfo(A_WinDir "\regedit.exe")
MsgBox % k " = " v
GetFileVersionInfo(Filename) {
;https://msdn.microsoft.com/en-us/library/windows/desktop/ms647005(v=vs.85).aspx
if !(Size := DllCall("Version.dll\GetFileVersionInfoSizeW", "Ptr", &Filename, "Ptr", 0, "UInt"))
return false, ErrorLevel := 2
;https://msdn.microsoft.com/en-us/library/windows/desktop/ms647003(v=vs.85).aspx
VarSetCapacity(VS_VERSIONINFO, Size * 2, 0)
if !DllCall("Version.dll\GetFileVersionInfoW", "Ptr", &Filename, "UInt", 0, "UInt", Size, "Ptr", &VS_VERSIONINFO, "Int")
return false, ErrorLevel := true
;https://msdn.microsoft.com/en-us/library/windows/desktop/ms647464(v=vs.85).aspx
if !DllCall("Version.dll\VerQueryValueW", "Ptr", &VS_VERSIONINFO, "Str", "\VarFileInfo\Translation", "PtrP", VERINFO, "UIntP", 0, "Int")
return false, ErrorLevel := 3
LangCP := "\StringFileInfo\" Format("{:04X}{:04X}", NumGet(VERINFO+0, "UShort"), NumGet(VERINFO+2, "UShort")) "\"
Info := {}
Loop, Parse, % "Comments|InternalName|ProductName|CompanyName|LegalCopyright|ProductVersion|FileDescription|LegalTrademarks|PrivateBuild|FileVersion|OriginalFilename|SpecialBuild", |
if DllCall("Version.dll\VerQueryValueW", "Ptr", &VS_VERSIONINFO, "Str", LangCP A_LoopField, "PtrP", VERINFO, "UIntP", Size, "Int")
Info[A_LoopField] := StrGet(VERINFO, Size)
return Info
}
GetFileVersionInfoEx(Filename) { ;WIN_V+
;https://msdn.microsoft.com/en-us/library/windows/desktop/aa969435(v=vs.85).aspx
if !(Size := DllCall("Version.dll\GetFileVersionInfoSizeExW", "UInt", 0x01, "Ptr", &Filename, "Ptr", 0, "UInt"))
return false, ErrorLevel := 2
;https://msdn.microsoft.com/en-us/library/windows/desktop/aa969434(v=vs.85).aspx
VarSetCapacity(VS_VERSIONINFO, Size * 2, 0)
if !DllCall("Version.dll\GetFileVersionInfoExW", "UInt", 0x01, "Ptr", &Filename, "UInt", 0, "UInt", Size, "Ptr", &VS_VERSIONINFO, "Int")
return false, ErrorLevel := true
;https://msdn.microsoft.com/en-us/library/windows/desktop/ms647464(v=vs.85).aspx
if !DllCall("Version.dll\VerQueryValueW", "Ptr", &VS_VERSIONINFO, "Str", "\VarFileInfo\Translation", "PtrP", VERINFO, "UIntP", 0, "Int")
return false, ErrorLevel := 3
LangCP := "\StringFileInfo\" Format("{:04X}{:04X}", NumGet(VERINFO+0, "UShort"), NumGet(VERINFO+2, "UShort")) "\"
Info := {}
Loop, Parse, % "Comments|InternalName|ProductName|CompanyName|LegalCopyright|ProductVersion|FileDescription|LegalTrademarks|PrivateBuild|FileVersion|OriginalFilename|SpecialBuild", |
if DllCall("Version.dll\VerQueryValueW", "Ptr", &VS_VERSIONINFO, "Str", LangCP A_LoopField, "PtrP", VERINFO, "UIntP", Size, "Int")
Info[A_LoopField] := StrGet(VERINFO, Size)
return Info
}