Get File Version (Windows)
Posted: Tue Aug 03, 2004 8:11 pm
				
				Code updated For 5.20+
I didn't see this when I searched the forum or the Code Archive, so here is a routine to get the version of a file:
			I didn't see this when I searched the forum or the Code Archive, so here is a routine to get the version of a file:
Code: Select all
    ;- get version of specified file as string
    Procedure.s GetFileVersion(FileSpec.s)
      VerBuffer.VS_FIXEDFILEINFO
      FileVersion.s
     
      If OpenLibrary(0, "version.dll")
        *GFI_Size = GetFunction(0, "GetFileVersionInfoSizeA")
        *GFI_Info = GetFunction(0, "GetFileVersionInfoA")
        *GFI_Value = GetFunction(0, "VerQueryValueA")
       
        If *GFI_Size And *GFI_Info And *GFI_Value
          ; get size of version information buffer
          BufferLen = CallFunctionFast(*GFI_Size, @FileSpec, @Dummy)
          If BufferLen
            ; allocate buffer and get version information
            *Buffer = AllocateMemory(BufferLen)
            CallFunctionFast(*GFI_Info, @FileSpec, 0, BufferLen, *Buffer)
            ; find file version and copy into structure
            CallFunctionFast(*GFI_Value, *Buffer, @"\", @VerPointer, @VerBufferLen)
            CopyMemory(VerPointer, VerBuffer, VerBufferLen)
            ; build file version string "x.x.x.x"
            FileVersion = Str((VerBuffer\dwFileVersionMS & $FFFF0000) >> 16) + "." + Str(VerBuffer\dwFileVersionMS & $0000FFFF) + "." + Str((VerBuffer\dwFileVersionLS & $FFFF0000) >> 16) + "." + Str(VerBuffer\dwFileVersionLS & $0000FFFF)
          EndIf
        EndIf
        CloseLibrary(0)
      EndIf
      ; return file version string
      ProcedureReturn FileVersion
    EndProcedure