how to get the file description ?

Windows specific forum
newbie
Enthusiast
Enthusiast
Posts: 296
Joined: Tue Jul 29, 2003 5:47 pm
Location: FRANCE
Contact:

how to get the file description ?

Post by newbie »

Hi,

I have looked throught MSDN (apparently not deeply enought) and I didn't found what I was looking for.

When you right clic on a file and go to properties, there is a "Version" tab, and there a 'Description' and 'Copyright' text, information I am trying to access.

GetFileVersionInfo and VerQueryValue only retrieve the version (e.g 4.12.36), and others API the icon, the size, or the file type.
I didn't found how to retrieve the description and copyright from a file.

Oh and BTW, if you know which API to call to make appear this properties tab, it interest me as well ;)

Thanks.
- Registered PB user -

Using PB 4.00
Sparkie
PureBatMan Forever
PureBatMan Forever
Posts: 2307
Joined: Tue Feb 10, 2004 3:07 am
Location: Ohio, USA

Post by Sparkie »

Found a post from Rings viewtopic.php?p=12939#12939

I changed the AllocateMemory() so it works with PB 3.92.

Code: Select all

;GetFileVersionInfo for Purebasic ;Gets the Info from a DLL (If you want to write your own installer  FPRIVATE "TYPE=PICT;ALT=icon_smile.gif" 
;(c)2002 By Siegfried Rings (CodeGuru)
; ************************************************************
; ************ Edited by Sparkie January 11, 2004 ************
; ************ Now works with PB 3.92 ************************
; ************************************************************
; Changed Line 24:  Mem1=AllocateMemory(1,Length,0)
; To:               *Mem1=AllocateMemory(Length)
; ************************************************************
; Changed:          all Mem1 references
; To:               *Mem1
; ************************************************************
; Changed Line 80:  FreeMemory(1)
; To:               FreeMemory(*Mem1)
; ************************************************************

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)
        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)
What goes around comes around.

PB 5.21 LTS (x86) - Windows 8.1
newbie
Enthusiast
Enthusiast
Posts: 296
Joined: Tue Jul 29, 2003 5:47 pm
Location: FRANCE
Contact:

Post by newbie »

Thanks Sparky, I was not so far, I used "\" and I was only retrieving the version number :-/

There is days that I am searching lol, thx again ;)
- Registered PB user -

Using PB 4.00
Sparkie
PureBatMan Forever
PureBatMan Forever
Posts: 2307
Joined: Tue Feb 10, 2004 3:07 am
Location: Ohio, USA

Post by Sparkie »

You're welcome newbie :)

And a thank you to Rings as well. ;)
What goes around comes around.

PB 5.21 LTS (x86) - Windows 8.1
newbie
Enthusiast
Enthusiast
Posts: 296
Joined: Tue Jul 29, 2003 5:47 pm
Location: FRANCE
Contact:

Post by newbie »

Oh and, while you are here, do you now how to make appear the properties tab for a file ?

Let's say the user clicks on a file on my program's Window, and I would want to popup the tab which appears when you right click - properties on a file.

Any idea ? :o
- Registered PB user -

Using PB 4.00
Sparkie
PureBatMan Forever
PureBatMan Forever
Posts: 2307
Joined: Tue Feb 10, 2004 3:07 am
Location: Ohio, USA

Post by Sparkie »

How about something like this. Right-click on a file to get properties dialog.

Code: Select all

verb$ = "properties"
SEI.SHELLEXECUTEINFO
SEI\cbSize = SizeOf(SHELLEXECUTEINFO)
SEI\fMask = #SEE_MASK_NOCLOSEPROCESS | #SEE_MASK_INVOKEIDLIST | #SEE_MASK_FLAG_NO_UI
SEI\lpVerb = @verb$
SEI\lpParameters = 0
SEI\lpDirectory = 0
SEI\nShow = 0
SEI\hInstApp = 0
SEI\lpIDList = 0
If OpenWindow(0, 0, 0, 400, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "ExplorerListGadget") And CreateGadgetList(WindowID(0)) 
  SEI\hwnd = WindowID(0)
  ExplorerListGadget(0, 10, 10, 380, 180, "*.*", #PB_Explorer_MultiSelect) 
  GadgetToolTip(0,"Right click for properties") 
  Repeat
    event = WaitWindowEvent()
    If EventGadgetID() = 0 And EventType() = #PB_EventType_RightClick
      currDir$ = GetGadgetText(0)
      currFile$ = GetGadgetItemText(0, GetGadgetState(0), 0)
      getProperties$ = currDir$ + currFile$
      SEI\lpFile = @getProperties$
      ShellExecuteEX_(@SEI)
    EndIf
  Until event = #PB_Event_CloseWindow 
EndIf 
End
What goes around comes around.

PB 5.21 LTS (x86) - Windows 8.1
newbie
Enthusiast
Enthusiast
Posts: 296
Joined: Tue Jul 29, 2003 5:47 pm
Location: FRANCE
Contact:

Post by newbie »

great :P

I just did a function from you code above :

Code: Select all

Procedure GetProperties(*File)
    verb$ = "properties"
    SEI.SHELLEXECUTEINFO
    SEI\cbSize = SizeOf(SHELLEXECUTEINFO)
    SEI\fMask = #SEE_MASK_NOCLOSEPROCESS | #SEE_MASK_INVOKEIDLIST | #SEE_MASK_FLAG_NO_UI
    SEI\lpVerb = @verb$
    SEI\lpParameters = 0
    SEI\lpDirectory = 0
    SEI\nShow = 0
    SEI\hInstApp = 0
    SEI\lpIDList = 0 
    SEI\lpFile = *File
    ShellExecuteEX_(@SEI)
EndProcedure
I guess I am converted now, I am a Sparkie's fan :mrgreen:
- Registered PB user -

Using PB 4.00
User avatar
CONVERT
Enthusiast
Enthusiast
Posts: 130
Joined: Fri May 02, 2003 12:19 pm
Location: France

Language problem.

Post by CONVERT »

The Sparkie's code does not seem to work on a XP SP2 with English kernel and French interface.

I changed 040904B0 by 040904E4 and it works fine!

Some explanation about 040904E4:

04 : SUBLANG_ENGLISH_USA
09 : LANG_ENGLISH
04E4 : 1252 in dec = Codepage for Windows:Multilingual

Found on http://www.vbfrance.com/code.aspx?id=26103
(in French)

In this Web page, it is question to use VerQueryValue first with "\VarFileInfo\Translation" parameter, to obtain this famous 040904E4, and then use it in the others VerQueryValue as in Sparkie's code.

But I am not able to translate 4 bytes in memory (8987036 (dec) = result of the VerQueryValue with "\VarFileInfo\Translation") into a string with hexadecimal representation ("040904E4") usable in the following VerQueryValues.

I need it, because I must use my program on several PC with different languages.

Here my code.

Thanks for any help...
Jean.

Code: Select all

;GetFileVersionInfo for Purebasic ;Gets the Info from a DLL (If you want to write your own installer  FPRIVATE "TYPE=PICT;ALT=icon_smile.gif" 
;(c)2002 By Siegfried Rings (CodeGuru) 
; ************************************************************ 
; ************ Edited by Sparkie January 11, 2004 ************ 
; ************ Now works with PB 3.92 ************************ 
; ************************************************************ 
; Changed Line 24:  Mem1=AllocateMemory(1,Length,0) 
; To:               *Mem1=AllocateMemory(Length) 
; ************************************************************ 
; Changed:          all Mem1 references 
; To:               *Mem1 
; ************************************************************ 
; Changed Line 80:  FreeMemory(1) 
; To:               FreeMemory(*Mem1) 
; ************************************************************ 

Procedure.s get_lang_char_string(wh_version_dll,*Mem1)
result$ = ""

; result$ = "040904E4" = hexadecimal representation written in a string
; 04------     = SUBLANG_ENGLISH_USA
; --09----     = LANG_ENGLISH
; ----04E4 = 1252 = Codepage For Windows:Multilingual
 
lplpBuffer.l=0 
puLen.l=0 
WhichOne.s="\\VarFileInfo\\Translation" 
Res = CallFunction(wh_version_dll, "VerQueryValueA",*Mem1,WhichOne.s,@lplpBuffer,@puLen) 

; lplpBuffer.l contains 4 bytes.
; the first 2 bytes contain 1033 (= in hexa 0409 = SUBLANG_ENGLISH_USA  LANG_ENGLISH )
; the last  2 bytes contain 1252 (= in hexa 04E4 = Codepage for Windows Multilingual)

; we have to translate it into a string representing hexadecimal value.
; (if I understand well)

; I am not able to find the good method to obtain "040904E4" 
; from @lplpBuffer (which contains 8987036 in dec) 

result$ = "040904E4"

ProcedureReturn result$
EndProcedure


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) 
        If *Mem1>0 
          Result = CallFunction(1, "GetFileVersionInfoA",Filename.s,0,Length,*Mem1) 
          If Result>0 
            
            lplpBuffer.l=0 
            puLen.l=0 
            
            lang_char_string.s = get_lang_char_string(1,*Mem1)
            
            If lang_char_string.s <> "" 
              WhichOne.s="\\StringFileInfo\\" + lang_char_string.s + "\\ProductVersion" ; 
              Result = CallFunction(1, "VerQueryValueA",*Mem1,WhichOne.s,@lplpBuffer,@puLen) 
              If Result:sDummy.s="Productversion="+PeekS(lplpBuffer): EndIf 
              
              WhichOne.s="\\StringFileInfo\\" + lang_char_string.s + "\\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\\" + lang_char_string.s + "\\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\\" + lang_char_string.s + "\\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\\" + lang_char_string.s + "\\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\\" + lang_char_string.s + "\\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\\" + lang_char_string.s + "\\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\\" + lang_char_string.s + "\\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\\" + lang_char_string.s + "\\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\\" + lang_char_string.s + "\\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\\" + lang_char_string.s + "\\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\\" + lang_char_string.s + "\\Language" 
              Result = CallFunction(1, "VerQueryValueA",*Mem1,WhichOne.s,@lplpBuffer,@puLen) 
              If Result:sDummy.s=sDummy.s + Chr(10) +"Language="+PeekS(lplpBuffer): EndIf 
            EndIf 
          EndIf  
          FreeMemory(*Mem1) 
        EndIf 
      EndIf 
      CloseLibrary(1) 
    EndIf 
  Else 
    sDummy.s=Filename +" Not found !" 
  EndIf 
  ProcedureReturn sDummy.s 
EndProcedure 

Filename.s="C:\Program Files\Microsoft Office\Office\Excel.exe"
 
Filename.s="C:\Program Files\Symantec AntiVirus\vptray.exe" ;Check your File ! 
MessageRequester("Fileinfo for "+Filename.s,GetVersionInfo(Filename),0)

End
PureBasic 6.20 beta 2 (x64) | Windows 10 Pro x64 | Intel(R) Core(TM) i7-8700 CPU @ 3.20Ghz 16 GB RAM, SSD 500 GB, PC locally assembled.
Come back to 6.11 LTS 64 bits because of an issue with #PB_ComboBox_UpperCase in ComboBoxGadget() (Oct. 10, 2024).
sverson
Enthusiast
Enthusiast
Posts: 286
Joined: Sun Jul 04, 2004 12:15 pm
Location: Germany

Post by sverson »

This version works with any language:

Code: Select all

;/ gfvi.pb - GetFileVersionInfo for PureBasic
;/ 2005-02-03 sverson
;/ 
;/ More Info on this topic:
;/ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/versioninformation.asp

Enumeration;- element name keys
  #GFVI_FileVersion      = $0001
  #GFVI_FileDescription  = $0002
  #GFVI_LegalCopyright   = $0004
  #GFVI_InternalName     = $0008
  #GFVI_OriginalFilename = $0010
  #GFVI_ProductName      = $0020
  #GFVI_ProductVersion   = $0040
  #GFVI_CompanyName      = $0080
  #GFVI_LegalTrademarks  = $0100
  #GFVI_SpecialBuild     = $0200
  #GFVI_PrivateBuild     = $0400
  #GFVI_Comments         = $0800
  #GFVI_Language         = $1000
  #GFVI_All              = $1FFF
EndEnumeration

Procedure.s GFVI_GetElementName(elementKey.l);- get element name from key [gfvi]
  If     elementKey = #GFVI_FileVersion      : ProcedureReturn "FileVersion"
  ElseIf elementKey = #GFVI_FileDescription  : ProcedureReturn "FileDescription"
  ElseIf elementKey = #GFVI_LegalCopyright   : ProcedureReturn "LegalCopyright"
  ElseIf elementKey = #GFVI_InternalName     : ProcedureReturn "InternalName"
  ElseIf elementKey = #GFVI_OriginalFilename : ProcedureReturn "OriginalFilename"
  ElseIf elementKey = #GFVI_ProductName      : ProcedureReturn "ProductName"
  ElseIf elementKey = #GFVI_ProductVersion   : ProcedureReturn "ProductVersion"
  ElseIf elementKey = #GFVI_CompanyName      : ProcedureReturn "CompanyName"
  ElseIf elementKey = #GFVI_LegalTrademarks  : ProcedureReturn "LegalTrademarks"
  ElseIf elementKey = #GFVI_SpecialBuild     : ProcedureReturn "SpecialBuild"
  ElseIf elementKey = #GFVI_PrivateBuild     : ProcedureReturn "PrivateBuild" 
  ElseIf elementKey = #GFVI_Comments         : ProcedureReturn "Comments"
  ElseIf elementKey = #GFVI_Language         : ProcedureReturn "Language"
  EndIf
EndProcedure

Procedure.s GFVI_GetInfo(lptstrFilename$,lekFlags,bFieldName);- get exe/dll file information [gfvi]
  Protected lpdwHandle.l, dwLen.w, lpData.l, lplpBuffer.l, puLen.l, *pBlock, lpSubBlock$
  Protected nSize.w, szLang$, bBit.b, lekFlag.l, sElement$, sGFVI$
  
  lplpBuffer = 0 : puLen = 0 : sGFVI$ = "" : nSize = 128 : szLang$ = Space(nSize)
  
  If FileSize(lptstrFilename$)>0
    If OpenLibrary(1,"Version.dll")
      dwLen = CallFunction(1,"GetFileVersionInfoSizeA",lptstrFilename$,@lpdwHandle)
      If dwLen>0
        *pBlock=AllocateMemory(dwLen)
        If *pBlock>0
          Result = CallFunction(1,"GetFileVersionInfoA",lptstrFilename$,0,dwLen,*pBlock)
          If Result
            lpSubBlock$ = "\\VarFileInfo\\Translation"
            Result      = CallFunction(1,"VerQueryValueA",*pBlock,lpSubBlock$,@lplpBuffer,@puLen)
            If Result
              CPLI$  = RSet(Hex(PeekW(lplpBuffer)),4,"0")+RSet(Hex(PeekW(lplpBuffer+2)),4,"0")
              Result = CallFunction(1,"VerLanguageNameA",PeekW(lplpBuffer),@szLang$,nSize)
            EndIf
            lekFlag = 1
            For bBit = 1 To 12
              If lekFlag & lekFlags
                sElement$   = GFVI_GetElementName(lekFlag)
                lpSubBlock$ = "\\StringFileInfo\\"+CPLI$+"\\"+sElement$
                Result      = CallFunction(1,"VerQueryValueA",*pBlock,lpSubBlock$,@lplpBuffer,@puLen)
                If Result
                  If sGFVI$<>"" : sGFVI$+Chr(10) : EndIf
                  If bFieldName
                    sGFVI$=sGFVI$+sElement$+":"+Chr(9)+PeekS(lplpBuffer)
                  Else
                    sGFVI$=sGFVI$+PeekS(lplpBuffer)
                  EndIf
                  
                EndIf
              EndIf
              lekFlag << 1
            Next
            If lekFlag & lekFlags
              If sGFVI$<>"" : sGFVI$+Chr(10) : EndIf
              If bFieldName
                sElement$ = GFVI_GetElementName(lekFlag)
                sGFVI$    = sGFVI$+sElement$+":"+Chr(9)+szLang$
              Else
                sGFVI$    = sGFVI$+szLang$
              EndIf
            EndIf
          EndIf
          FreeMemory(*pBlock)
        EndIf
      EndIf
      CloseLibrary(1)
    EndIf
  EndIf
  ProcedureReturn sGFVI$
EndProcedure

;- test GFVI-functions

File$  = OpenFileRequester("Open File", "gfvi.exe", "GFVI |*.exe;*.dll|all files (*.*)|*.*", 0)
VInfo$ = GFVI_GetInfo(File$,#GFVI_FileVersion|#GFVI_CompanyName,#False)
MessageRequester("Fileinfo for "+GetFilePart(File$),VInfo$,#MB_OK|#MB_ICONINFORMATION)
VInfo$ = GFVI_GetInfo(File$,#GFVI_All,#True)
MessageRequester("Fileinfo for "+GetFilePart(File$),VInfo$,#MB_OK|#MB_ICONINFORMATION)

End
:wink: sverson
Post Reply