BooksXL - Ihr Online Buchshop

 

Home

Projekte

VB Tipps

über mich

vb tipps

 

 

AMAZON: XML mit VB und ASP

home english version

Versionsüberprüfung WinWord & Co

Manches Mal ärgerte ich mich bei der Installation von Programmen darüber, daß ich nach der Version meiner Textverarbeitung gefragt wurde. Ein Produkt, das eine Vielzahl unterschiedlicher Textverarbeitungen und das auch noch in unterschiedlichen Versionen unterstützen musste, sollte dies besser können.

Zunächst wählt der Benutzer aus, welches Programm er unterstüzt haben möchte. Anschließend wird dieses Textverarbeitungsprogramm auf seinem System gesucht:

Declare Function FindExecutable Lib "shell.dll" (ByVal lpFile _
As String, ByVal lpDirectory As String, _
ByVal lpResult As String) As Long Private Function GetExecutableFound(AppStr As String) As String Dim h1, h2, h3 As String * 255 Dim x& h1 = AppStr & Chr$(0) h2 = Chr$(0) h3 = String(255, 0) x& = FindExecutable(h1, h2, h3) If h3 = String(255, 0) Then GetExecutableFound = "" Else GetExecutableFound = h3 End If End Function

Wichtig beim Aufruf der Funktion GetExecutableFound ist, daß eine tatsächlich bestehende Datei angegeben wird, da die API Funktion FindExecutable bei Übergabe einer nicht existierenden Datei ebenfalls keine zugehörige Applikation zurückliefert:

        ...
        ret$ = GetExecutableFound(SourcePath$ + "instfile." + _
WPExtension(Selected%)) ...

Dann wird mit der Funktion GetFileVersion die Version der Applikation abgefragt. Aber Achtung: einige der uralten Textverarbeitungssysteme (z.B. WinWord 2.0a, Amipro 2) beinhalten keine Versionskennzeichnung. Vorher unbedingt testen!!

Function GetFileVersion(FileToCheck As String) As String
    On Error Resume Next
    VersionInfoSize& = GetFileVersionInfoSize(FileToCheck, lpdwHandle&)
    If VersionInfoSize& = 0 Then
        GetFileVersion = ""
        Exit Function
    End If
    lpvdata$ = String(VersionInfoSize&, Chr$(0))
    VersionInfo% = GetFileVersionInfo(FileToCheck, lpdwHandle&, _
VersionInfoSize&, lpvdata$) ptrFixed% = VerQueryValue(lpvdata$, "\FILEVERSION", _
lplpBuffer&, lpcb%) If ptrFixed% = 0 Then ' Take a shot with the hardcoded TransString TransString$ = "040904E4" ptrString% = VerQueryValue(lpvdata$, "\StringFileInfo\" & _
TransString$ & "\CompanyName", lplpBuffer&, lpcb%) If ptrString% <> 0 Then GoTo GetValues ptrFixed% = VerQueryValue(lpvdata$, "\", lplpBuffer&, lpcb%) If ptrFixed% = 0 Then GetFileVersion = "" Exit Function Else TransString$ = "" fixedstr$ = String(lpcb% + 1, Chr(0)) stringcopy& = lstrcpyn(fixedstr$, lplpBuffer&, lpcb% + 1) For i = lpcb% To 1 Step -1 Char$ = Hex(Asc(Mid(fixedstr$, i, 1))) If Len(Char$) = 1 Then Char$ = "0" + Char$ End If TransString$ = TransString$ + Char$ If Len(TransString$ & nextchar$) Mod 8 = 0 Then TransString$ = "&H" & TransString$ TransValue& = Val(TransString$) TransString$ = "" End If Next i End If End If TransTable$ = String(lpcb% + 1, Chr(0)) TransString$ = String(0, Chr(0)) stringcopy& = lstrcpyn(TransTable$, lplpBuffer&, lpcb% + 1) For i = 1 To lpcb% Char$ = Hex(Asc(Mid(TransTable$, i, 1))) If Len(Char$) = 1 Then Char$ = "0" + Char$ End If If Len(TransString$ & nextchar$) Mod 4 = 0 Then nextchar$ = Char$ Else TransString$ = TransString$ + Char$ + nextchar$ nextchar$ = "" Char$ = "" End If Next i GetValues: ptrString% = VerQueryValue(lpvdata$, "\StringFileInfo\" & _
TransString$ & "\FileVersion", lplpBuffer&, lpcb%) If ptrString% = 1 Then TransTable$ = String(lpcb%, Chr(0)) stringcopy& = lstrcpyn(TransTable$, lplpBuffer&, lpcb% + 1) GetFileVersion = TransTable$ Else GetFileVersion = "" End If End Function

top