Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

ACC2000: Sample Function to Retrieve File Version Information


View products that this article applies to.

Summary

This article shows you how to create a sample user-defined Visual Basic for Applications function that you can use to check the file version information stored in most files.

↑ Back to the top


More information

Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements. CAUTION: If you follow the steps in this example, you modify the sample database Northwind.mdb. You may want to back up the Northwind.mdb file and follow these steps on a copy of the database.

Most files used by Windows-based programs contain a version stamp. You can check this version stamp by using Windows API (application programming interface) calls within Visual Basic for Applications.

The following example shows you how to create a sample user-defined function to check the version number (if available) of a file.

NOTE: You may have some Microsoft Windows API functions defined in an existing Microsoft Access library; therefore, your declarations may be duplicates. If you receive a duplicate procedure name error message, remove or comment out the declarations statement in your code.
  1. Open the sample database Northwind.mdb.
  2. Create a new module, and then type or paste the following code into the new module:
    Type FileInfo
       wLength            As Integer
       wValueLength       As Integer
       szKey              As String * 16
       dwSignature        As Long
       dwStrucVersion     As Long
       dwFileVersionMS    As Long
       dwFileVersionLS    As Long
    End Type
    
    ' NOTE: The following Declare statements are case sensitive.
    
    Declare Function GetFileVersionInfo& Lib "Version" _
         Alias "GetFileVersionInfoA" (ByVal FileName$, _
         ByVal dwHandle&, ByVal cbBuff&, ByVal lpvData$)
    Declare Function GetFileVersionInfoSize& Lib "Version" Alias _
         "GetFileVersionInfoSizeA" (ByVal FileName$, dwHandle&)
    Declare Sub hmemcpy Lib "Kernel32" Alias "RtlMoveMemory" _
         (hpvDest As Any, hpvSource As Any, ByVal cbBytes&)
    
    Function LOWORD(x As Long) As Integer
       LOWORD = x And &HFFFF&
       ' Low 16 bits contain Minor revision number.
    End Function
    
    Function HIWORD(x As Long) As Integer
       HIWORD = x \ &HFFFF&
       ' High 16 bits contain Major revision number.
    End Function
    					
  3. Save the module, and create a new blank form.
  4. Add a text box to the form, and set its Name property to FName.
  5. Add a command button to the form, and set its OnClick property to the following event procedure:
    Dim x As FileInfo
    Dim FileVer As String
    Dim FileName As String
    Dim dwHandle&, BufSize&, lpvData$, R&
    
    '*** Get Version Information If Available ****
    FileVer = ""
    FileName = Me![FName]
    BufSize& = GetFileVersionInfoSize(FileName, dwHandle&)
    If BufSize& = 0 Then
       MsgBox "Invalid File Name or no Version information available"
       Exit Sub
    End If
    lpvData$ = Space$(BufSize&)
    R& = GetFileVersionInfo(FileName, dwHandle&, BufSize&, lpvData$)
    hmemcpy x, ByVal lpvData$, Len(x)
    
    '**** Parse File Version Number ****
    FileVer = Trim$(Str$(HIWORD(x.dwFileVersionMS))) + "."
    FileVer = FileVer + Trim$(Str$(LOWORD(x.dwFileVersionMS))) + "."
    FileVer = FileVer + Trim$(Str$(HIWORD(x.dwFileVersionLS))) + "."
    FileVer = FileVer + Trim$(Str$(LOWORD(x.dwFileVersionLS)))
    
    MsgBox FileVer, 64, "Version of " & FileName
    					
  6. To use the function, on the View menu, click Form View, and then type a valid path and file name in the FName text box. The following lines are examples of valid paths and file names:
    C:\Windows\System\Notepad.exe
    C:\Program Files\Microsoft Office\Office\MSAccess.exe
  7. After entering a path to a file, click the command button to see the version displayed in a message box.

↑ Back to the top


References

For more information about duplicate declarations, in the Visual Basic Editor, click Microsoft Visual Basic Help on the Help menu, type avoiding naming conflicts in the Office Assistant or the Answer Wizard, and then click Search to view the topic.

For more information about declaring APIs, in the Visual Basic Editor, click Microsoft Visual Basic Help on the Help menu, type declare statement in the Office Assistant or the Answer Wizard, and then click Search to view the topic.

↑ Back to the top


Keywords: KB210120, kbprogramming, kbinfo, kbhowto

↑ Back to the top

Article Info
Article ID : 210120
Revision : 4
Created on : 6/23/2005
Published on : 6/23/2005
Exists online : False
Views : 474