Datei-Informationen auslesen und schreiben

Hallo !

seit dem es 32bit Betriebsysteme gibt können Dateien eine Erweiterte Datei-Informationen enthalten. Diese wird nicht in dem Lesbahren teil der Datei sondern zusammen mit Erstellungsdatum Änderungsdatum … gespeichert.

Kann mir zufällig jemand sagen wie ich diesen Bereich auslehsen und auch überschreiben kann.

Danke schonmal im Voraus !

Cu Stefan

Hallo Stefan,

ich habe Dir das Beispiel aus API-Guide kopiert …

Const VS\_FFI\_SIGNATURE = &HFEEF04BD
Const VS\_FFI\_STRUCVERSION = &H10000
Const VS\_FFI\_FILEFLAGSMASK = &H3F&
Const VS\_FF\_DEBUG = &H1
Const VS\_FF\_PRERELEASE = &H2
Const VS\_FF\_PATCHED = &H4
Const VS\_FF\_PRIVATEBUILD = &H8
Const VS\_FF\_INFOINFERRED = &H10
Const VS\_FF\_SPECIALBUILD = &H20
Const VOS\_UNKNOWN = &H0
Const VOS\_DOS = &H10000
Const VOS\_OS216 = &H20000
Const VOS\_OS232 = &H30000
Const VOS\_NT = &H40000
Const VOS\_\_BASE = &H0
Const VOS\_\_WINDOWS16 = &H1
Const VOS\_\_PM16 = &H2
Const VOS\_\_PM32 = &H3
Const VOS\_\_WINDOWS32 = &H4
Const VOS\_DOS\_WINDOWS16 = &H10001
Const VOS\_DOS\_WINDOWS32 = &H10004
Const VOS\_OS216\_PM16 = &H20002
Const VOS\_OS232\_PM32 = &H30003
Const VOS\_NT\_WINDOWS32 = &H40004
Const VFT\_UNKNOWN = &H0
Const VFT\_APP = &H1
Const VFT\_DLL = &H2
Const VFT\_DRV = &H3
Const VFT\_FONT = &H4
Const VFT\_VXD = &H5
Const VFT\_STATIC\_LIB = &H7
Const VFT2\_UNKNOWN = &H0
Const VFT2\_DRV\_PRINTER = &H1
Const VFT2\_DRV\_KEYBOARD = &H2
Const VFT2\_DRV\_LANGUAGE = &H3
Const VFT2\_DRV\_DISPLAY = &H4
Const VFT2\_DRV\_MOUSE = &H5
Const VFT2\_DRV\_NETWORK = &H6
Const VFT2\_DRV\_SYSTEM = &H7
Const VFT2\_DRV\_INSTALLABLE = &H8
Const VFT2\_DRV\_SOUND = &H9
Const VFT2\_DRV\_COMM = &HA
Private Type VS\_FIXEDFILEINFO
 dwSignature As Long
 dwStrucVersionl As Integer ' e.g. = &h0000 = 0
 dwStrucVersionh As Integer ' e.g. = &h0042 = .42
 dwFileVersionMSl As Integer ' e.g. = &h0003 = 3
 dwFileVersionMSh As Integer ' e.g. = &h0075 = .75
 dwFileVersionLSl As Integer ' e.g. = &h0000 = 0
 dwFileVersionLSh As Integer ' e.g. = &h0031 = .31
 dwProductVersionMSl As Integer ' e.g. = &h0003 = 3
 dwProductVersionMSh As Integer ' e.g. = &h0010 = .1
 dwProductVersionLSl As Integer ' e.g. = &h0000 = 0
 dwProductVersionLSh As Integer ' e.g. = &h0031 = .31
 dwFileFlagsMask As Long ' = &h3F for version "0.42"
 dwFileFlags As Long ' e.g. VFF\_DEBUG Or VFF\_PRERELEASE
 dwFileOS As Long ' e.g. VOS\_DOS\_WINDOWS16
 dwFileType As Long ' e.g. VFT\_DRIVER
 dwFileSubtype As Long ' e.g. VFT2\_DRV\_KEYBOARD
 dwFileDateMS As Long ' e.g. 0
 dwFileDateLS As Long ' e.g. 0
End Type
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 Any, puLen As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, ByVal Source As Long, ByVal length As Long)
Dim Filename As String, Directory As String, FullFileName As String
Dim StrucVer As String, FileVer As String, ProdVer As String
Dim FileFlags As String, FileOS As String, FileType As String, FileSubType As String
Private Sub DisplayVerInfo()
 Dim rc As Long, lDummy As Long, sBuffer() As Byte
 Dim lBufferLen As Long, lVerPointer As Long, udtVerBuffer As VS\_FIXEDFILEINFO
 Dim lVerbufferLen As Long

 '\*\*\* Get size \*\*\*\*
 lBufferLen = GetFileVersionInfoSize(FullFileName, lDummy)
 If lBufferLen MS Knowledge Base
 'set the file
 Filename = "kernel32.dll"
 Directory = "c:\windows\system\"
 FullFileName = Directory + Filename
 'set graphics mode to persistent
 Me.AutoRedraw = True
 'retrieve the information
 DisplayVerInfo
 'show the results
 Me.Print "Full filename: " + FullFileName
 Me.Print "File version: " + FileVer
 Me.Print "Product version: " + ProdVer
 Me.Print "File flags: " + FileFlags
 Me.Print "File OS: " + FileOS
 Me.Print "File type: " + FileType + IIf(FileSubType = "", "", " (" + FileSubType + ")")
End Sub

viel Spaß damit. :smile:

Gruß, Rainer

Danke Rainer

Habe mir den Code erst einmal in mein Programm gezogen und werde mal schauen ob ich damit zurecht komme.

Hatte bisher noch nicht mit DLL Dateien gearbeitet.

Cu Stefan

Hallo Stefan,

Habe mir den Code erst einmal in mein Programm gezogen und
werde mal schauen ob ich damit zurecht komme.

Hatte bisher noch nicht mit DLL Dateien gearbeitet.

das Beispiel macht wohl einiges mehr, als Du willst. Ich würde das erst mal in einem eigenen Projakt testen, nach und nach Teile auskommentieren, bis das übrig bleibt und funktioniert, was Du brauchst. Oft sind das dann nur noch wenige Zeilen. :smile: Für das Verständnis ist aber so ein umfangreiches Projekt sinnvoll, wenn man es verstanden hat, kann man leichter einzelne Komponenten verwenden.

Gruß, Rainer