Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0609: Kompilierzeit einer Exe-Datei auslesen

 von 

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:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

SystemTimeToTzSpecificLocalTime

Download:

Download des Beispielprojektes [2,69 KB]

'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-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

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.