Trying to read the version number of an EXE-file I used following code:
Code: Select all
Procedure.l HiWord(dw) If dw And $80000000
ProcedureReturn (dw/65535) - 1
Else
ProcedureReturn dw/65535
EndIf
EndProcedure
Procedure.l LoWord(dw)
If dw And $8000
ProcedureReturn $8000 Or (dw And $7FFF)
Else
ProcedureReturn dw And $FFFF
EndIf
EndProcedure
Procedure.s GetFileVersion(Filepath$)
Version$ = ""
If OpenLibrary(1,"Version.dll")
Length = CallFunction(1, "GetFileVersionInfoSizeA",Filepath$, @Zero)
If Length > 0
Dim btBuffer.b(Length)
Item$ = "\"
If CallFunction(1, "GetFileVersionInfoA", Filepath$, 0, @Length, @btBuffer(0))
If CallFunction(1, "VerQueryValueA",@btBuffer(0), Item$, @lplpBuffer, @puLen)
CopyMemory(lplpBuffer, uFI.VS_FIXEDFILEINFO, SizeOf(VS_FIXEDFILEINFO))
;// ------------------------------------------------------------------------
Debug HiWord(PeekL(@uFI\dwFileVersionMS)) ; = 9 should be 10 ???
Debug LoWord(PeekL(@uFI\dwFileVersionMS)) ; = 1 should be 0 ???
If PeekL(@uFI\dwFileVersionLS)
Debug HiWord(PeekL(@uFI\dwFileVersionLS)); = 4218 should be 4219 ???
Debug LoWord(PeekL(@uFI\dwFileVersionLS)); = 1 should be 0 ???
EndIf
;// ------------------------------------------------------------------------
EndIf
EndIf
EndIf
CloseLibrary(1)
EndIf
ProcedureReturn Version$
EndProcedure
Debug GetFileVersion("C:\Programme\Microsoft Office\Office10\WINWORD.EXE")Do anyone knows an easier way to read this version data from EXE-Files?
Thanks!
sk
