Rubrik: Windows/System | 28.07.01 |
MoveMemory-Funktion Diese Funktion kopiert den Inhalt einer Variable in eine andere. | ||
Betriebssystem: Win95, Win98, WinNT 3.1, Win2000, WinME | Views: 14.519 |
Deklaration:
Declare Sub MoveMemory Lib "kernel32.dll" _ Alias "RtlMoveMemory" ( _ Destination As Any, _ Source As Any, _ ByVal Length As Long)
Beschreibung:
Diese Funktion kopiert den Inhalt einer Variable in eine andere. Wird oftmals benötigt, wenn man die Variablen oder die Speicheradresse einer Variable einer Funktion übergeben muss.
Parameter:
Destination | Zielvariable, in welche die Daten kopiert werden sollen. Wird ein Pointer zu einer Variable in Form eines Strings oder einer Long-Variable übergeben, so müssen diese Werte mit "ByVal" initialisiert werden. |
Source | Quellvariable, deren Daten (Inhalt) kopiert werden sollen. Wird ein Pointer zu einer Variable in Form eines Strings oder einer Long-Variable übergeben, so müssen diese Werte mit "ByVal" initialisiert werden. |
Length | Anzahl der zu kopierenden Bytes |
Rückgabewert:
keiner
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