vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2014
 
zurück
Rubrik: Dateisystem29.07.01
VerQueryValue-Funktion

Diese Funktion extrahiert aus einer über der GetFileVersionInfo.html-Funktion erhaltenen Versionsinformationen alle wichtigen Daten.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  4.873 

Deklaration:

Declare Function VerQueryValue Lib "version.dll" _
  Alias "VerQueryValueA" ( _
  pBlock As Any, _
  ByVal lpSubBlock As String, _
  lplpBuffer As Long, _
  puLen As Long) As Long

Beschreibung:
Diese Funktion extrahiert aus einer über der GetFileVersionInfo-Funktion erhaltenen Versionsinformationen alle wichtigen Daten.

Parameter:
pBlockDaten-Block mit den Versionsinformationen einer Datei (kann mittels der GetFileVersionInfo-Funktion ermittelt werden.
lpSubBlockErwartet einen String der den Teilbereich angibt, welcher aus den Versionsinformationen extrahiert werden soll. Übergeben Sie für eine komplette VS_FIXEDFILEINFO-Struktur einen Backslash "\".
lplpBufferPointer zu den extrahierten Versionsinformationen. Bei übergebenen Backslash ist dies ein Pointer zu einer VS_FIXEDFILEINFO-Struktur.
puLenGibt die Größe des Puffers zurück.

Rückgabewert:
War der Funktionsaufruf erfolgreich, so wird ein Wert ungleich 0 zurückgegeben, andernfalls ist der Rückgabewert 0.


Beispiel:

Private Declare Function GetFileVersionInfo Lib "version.dll" _
  Alias "GetFileVersionInfoA" ( _
  ByVal lptstrFilename As String, _
  ByVal dwHandle As Long, _
  ByVal dwLen As Long, _
  lpData As Any) As Long
 
Private Declare Function GetFileVersionInfoSize Lib "version.dll" _
  Alias "GetFileVersionInfoSizeA" ( _
  ByVal lptstrFilename As String, _
  lpdwHandle As Long) As Long
 
Private Declare Function VerQueryValue Lib "version.dll" _
  Alias "VerQueryValueA" ( _
  pBlock As Any, _
  ByVal lpSubBlock As String, _
  lplpBuffer As Long, _
  puLen As Long) As Long
 
Private Declare Function lstrcpy Lib "kernel32.dll" _
  Alias "lstrcpyA" ( _
  ByVal lpString1 As Any, _
  ByVal lpString2 As Any) As Long
 
Private Declare Sub MoveMemory Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  dest As Any, _
  ByVal Source As Long, _
  ByVal length As Long)
 
Private Type VS_FIXEDFILEINFO
  dwSignature As Long
  dwStrucVersionl As Integer
  dwStrucVersionh As Integer
  dwFileVersionMSl As Integer
  dwFileVersionMSh As Integer
  dwFileVersionLSl As Integer
  dwFileVersionLSh As Integer
  dwProductVersionMSl As Integer
  dwProductVersionMSh As Integer
  dwProductVersionLSl As Integer
  dwProductVersionLSh As Integer
  dwFileFlagsMask As Long
  dwFileFlags As Long
  dwFileOS As Long
  dwFileType As Long
  dwFileSubtype As Long
  dwFileDateMS As Long
  dwFileDateLS As Long
End Type
 
Public Type FileVInfo
  FileName As String
  FileType As String
  FileVersion As String
  FilePath As String
End Type
 
Private Const VFT_APP = &H1
Private Const VFT_DLL = &H2
Private Const VFT_DRV = &H3
Private Const VFT_VXD = &H5
Private Const VFT_FONT = &H4&
Private Const VFT_STATIC_LIB = &H7&
Private Const VFT_UNKNOWN = &H0&
' VersionsInformationen auslesen
Public Function GetFileVersionInformation(ByVal _
  FilePath As String) As FileVInfo
 
  Dim PufferLänge As Long
  Dim Puffer() As Byte
  Dim Pointer As Long
  Dim PointerLänge As Long
  Dim VInfo As VS_FIXEDFILEINFO
 
  ' Püfferlänge ermitteln
  PufferLänge = GetFileVersionInfoSize(FilePath, 0&)
 
  ' Keine Versions-Info?
  If PufferLänge < 1 Then GoTo Go_Out
 
  ' Puffer größe ändern
  ReDim Puffer(PufferLänge)
 
  ' Versions-Info ermitteln
  GetFileVersionInfo FilePath, 0&, PufferLänge, Puffer(0)
 
  ' Pointer VersionsInfo
  VerQueryValue Puffer(0), "\", Pointer, PointerLänge
 
  ' VersionsInfo in Struktur VInfo kopieren
  MoveMemory VInfo, Pointer, Len(VInfo)
 
Go_Out:
  ' Struktur füllen
  With GetFileVersionInformation
    .FilePath = FilePath
    .FileName = Right$(FilePath, Len(FilePath) - _
      InStrRev(FilePath, "\"))
    Select Case VInfo.dwFileType
      Case VFT_APP
        .FileType = "Anwendung"
      Case VFT_DLL
        .FileType = "Dynamic Link Library (DLL)"
      Case VFT_DRV
        .FileType = "Geräte Trieber"
      Case VFT_VXD
        .FileType = "Virtueller Geräte Treiber"
      Case VFT_FONT
        .FileType = "Schriftart"
      Case VFT_STATIC_LIB
        .FileType = "Static Library"
      Case VFT_UNKNOWN
        .FileType = "Unbekannt"
    End Select
    .FileVersion = Format$(VInfo.dwFileVersionMSh) & "." & _
      Format$(VInfo.dwFileVersionMSl) & "." & _
      Format$(VInfo.dwFileVersionLSh) & "." & _
      Format$(VInfo.dwFileVersionLSl)
  End With
End Function

Starten Sie ein neues Projekt und fügen Sie das MS-CommonDialog Steuerelement hinzu. Plazieren Sie auf der Form ein CommonDialg-Element, ein Command-Button, sowie vier Bezeichner-Elemente (Label1 - Label4).

Private Sub Command1_Click()
  Dim FVI As FileVInfo
  On Error GoTo Err_Cancel
 
  With CommonDialog1
    ' Common Dialog konfigurieren
    .Flags = cdlOFNFileMustExist
    .CancelError = True
    .DefaultExt = App.Path
    .DialogTitle = "Datei Öffnen"
    .Filter = "*.exe - Anwendungen|*.exe|" + _
      "*.dll - Dynamic Link Library|*.dll|" + _
      "*.drv - Geräte Treiber|*.drv|" + _
      "*.vxd - Virtueller Geräte Treiber|*.vxd|" + _
      "*.* - Alle Dateien|*.*"
    .ShowOpen
 
    ' Datei-Informationen ermitteln
    FVI = GetFileVersionInformation(.FileName)
  End With
 
  ' Label-Felder mit Informationen füllen
  With FVI
    Label1.Caption = "Datei Name: " & .FileName
    Label2.Caption = "Datei Pfad: " & .FilePath
    Label3.Caption = "Datei Typ: " & .FileType
    Label4.Caption = "Datei Version: " & .FileVersion
  End With
  Exit Sub
 
Err_Cancel:
End Sub

Diese Seite wurde bereits 4.873 mal aufgerufen.

nach obenzurück
 
   

Druckansicht Druckansicht Copyright ©2000-2014 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.

Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel