GetFileVersionInfo

Share your advanced PureBasic knowledge/code with the community.
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

GetFileVersionInfo

Post by BackupUser »

Code updated for 5.20+

Restored from previous forum. Originally posted by Rings.

Code: Select all

;GetFileVersionInfo for Purebasic ;Gets the Info from a DLL (If you want to write your own installer :)
;(c)2002 By Siegfried Rings (CodeGuru)
;

Procedure.s GetVersionInfo(Filename.s)
  sDummy.s=""
  If FileSize(Filename.s)>0
    Zero.l=10
    
    If OpenLibrary(1,"Version.dll")
      Length = CallFunction(1, "GetFileVersionInfoSizeA", @Filename.s,@Zero.l)
      
      If Length>0
        *Mem1=AllocateMemory(Length,0)
        
        If *Mem1>0
          Result = CallFunction(1, "GetFileVersionInfoA", @Filename.s,0,Length,*Mem1)
          
          If Result>0
            
            lplpBuffer.l=0
            puLen.l=0
            
            WhichOne.s="\\StringFileInfo\\040904B0\\ProductVersion"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s="Productversion="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\ProductName"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"ProductName="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\CompanyName"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"CompanyName="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\LegalCopyright"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"LegalCopyright="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\Comments"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"Comments="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\FileDescription"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"FileDescription="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\FileVersion"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"FileVersion="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\InternalName"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"InternalName="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\LegalTrademarks"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"LegalTrademarks="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\PrivateBuild"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"PrivateBuild="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\SpecialBuild"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"SpecialBuild="+PeekS(lplpBuffer): EndIf
            
            WhichOne.s="\\StringFileInfo\\040904B0\\Language"
            Result = CallFunction(1, "VerQueryValueA",*Mem1,@WhichOne.s,@lplpBuffer,@puLen)
            If Result:sdummy.s=sdummy.s + Chr(10) +"Language="+PeekS(lplpBuffer): EndIf
          EndIf
          
          FreeMemory(*Mem1)
          
        EndIf
      EndIf
      
      CloseLibrary(1)
      
    EndIf
    
  Else
    sdummy.s=Filename +" Not found !"
  EndIf 
  
  ProcedureReturn sDummy.s
EndProcedure

Path.s=Space(256)
Result=GetSystemDirectory_(Path.s,256)
Filename.s=Path+"\MSVBVM60.DLL" ;Check your File !
MessageRequester("Fileinfo for "+Filename.s,GetVersionInfo(Filename),0)
Its a long way to the top if you wanna .....CodeGuru
Last edited by fsw on Fri Aug 23, 2013 12:49 am, edited 1 time in total.
Reason: Code updated for 5.20+