VB 5/6-Tipp 0609: Kompilierzeit einer Exe-Datei auslesen
von Peter K. Sauer
Beschreibung
Im Header einer Exe-Datei wird auch gespeichert, wann die Exe-Datei erstellt wurde. Dieser Tipp zeigt, an welcher Position sich diese Information befindet und liest sie aus.
Update von Benjamin Wilger am 24. Februar 2004: Die Zeit sollte nun in allen Zeitzonen richtig angezeigt werden.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Projekt1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Textfeld "Text1" ' Steuerelement: Beschriftungsfeld "Label1" Option Explicit Private Declare Function SystemTimeToTzSpecificLocalTime Lib "kernel32.dll" ( _ ByRef lpTimeZoneInformation As Long, _ ByRef lpUniversalTime As SYSTEMTIME, _ ByRef lpLocalTime As SYSTEMTIME) As Long Private Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type Public Function GetCompileTime(ByVal strPath As String, _ Optional ErrNumber As Long, _ Optional ErrDescription As Long) As String 'ermitteln Compilierzeit auf Standardzeit zum Vergleich 'von 2 Programmversionen, hPfad MUSS geprüft sein Dim strContent As String Dim strBuffer As String Dim lngSeconds As Long Dim strOffset As String Dim FNr As Integer Dim dtFileTime As Date Dim i As Long Dim tUniversalTime As SYSTEMTIME Dim tNewTime As SYSTEMTIME 'Exe-File einlesen FNr = FreeFile Open strPath For Binary As #FNr strContent = Space(512) Get #FNr, , strContent Close #FNr 'ausgelesenen Wert in HexString wandeln strBuffer = Space(Len(strContent) * 2) For i = 0 To Len(strContent) - 1 Mid(strBuffer, i * 2 + 1) = Right("00" & Hex$(Asc( _ Mid(strContent, i + 1, 1))), 2) Next ' Kennung suchen (bei 32-Bit Win Programmen normalerweise "PE") i = InStr(strBuffer, "5045") If i = 0 Then Err.Raise 76 ErrNumber = 76 ErrDescription = "Einsprung nicht gefunden" Exit Function End If ' Zeitstempel (UTC Unixtime) auslesen u. umdrehen strOffset = Mid$(strBuffer, i + 16, 8) strContent = Mid$(strOffset, 7, 2) & Mid$(strOffset, 5, 2) & _ Mid$(strOffset, 3, 2) & Mid$(strOffset, 1, 2) 'HexWert umwandeln in Long Wert lngSeconds = CLng("&H" & strContent) 'Unix Start Datum + Sekunden addieren dtFileTime = DateAdd("s", lngSeconds, CDate("01.01.1970")) tUniversalTime.wDayOfWeek = 1 tUniversalTime.wYear = Year(dtFileTime) tUniversalTime.wMonth = Month(dtFileTime) tUniversalTime.wDay = Day(dtFileTime) tUniversalTime.wHour = Hour(dtFileTime) tUniversalTime.wMinute = Minute(dtFileTime) tUniversalTime.wSecond = Second(dtFileTime) SystemTimeToTzSpecificLocalTime ByVal 0&, tUniversalTime, tNewTime GetCompileTime = CDate(tNewTime.wDay & "." & tNewTime.wMonth & _ "." & tNewTime.wYear & " " & tNewTime.wHour & _ ":" & tNewTime.wMinute & ":" & tNewTime.wSecond) End Function Private Sub Command1_Click() MsgBox "Die Datei wurde compiliert am " & GetCompileTime(Text1) End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Projekt1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.