Aber natürlich kann ich den Code für die Funktion CheckComCtl32Version posten. Es ist nur eine simple Überprüfung, ob die COMCTL32.DLL mindestens in Version 5.80.xxxx vorliegt, da erst mit dieser Version die "Sprechblasen" als Tooltip-Fenster (und einige andere Features) unterstützt werden.
Hier der Code (mit allen API-Funktionen):
Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias _
"GetFileVersionInfoA" ( _
ByVal strFilename As String, _
ByVal lHandle As Long, _
ByVal lDataLen As Long, _
lpData As Any) As Long
Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias _
"GetFileVersionInfoSizeA" ( _
ByVal strFilename As String, _
lHandle As Long) As Long
Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" _
( _
Block As Any, _
ByVal strSubBlock As String, _
Buffer As Any, _
lLen As Long) As Long
Private Declare Function GetSystemDirectory Lib "kernel32.dll" Alias _
"GetSystemDirectoryA" ( _
ByVal strPath As String, _
ByVal lBytes As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
dest As Any, _
ByVal Source As Long, _
ByVal lLength As Long)
Private Type VS_FIXEDFILEINFO
lSignature As Long
iStrucVersionl As Integer
iStrucVersionh As Integer
iFileVersionMSl As Integer
iFileVersionMSh As Integer
iFileVersionLSl As Integer
iFileVersionLSh As Integer
iProductVersionMSl As Integer
iProductVersionMSh As Integer
iProductVersionLSl As Integer
iProductVersionLSh As Integer
lFileFlagsMask As Long
lFileFlags As Long
lFileOS As Long
lFileType As Long
lFileSubtype As Long
lFileDateMS As Long
lFileDateLS As Long
End Type
Private Function CheckComCtl32Version() As Boolean
Dim strFilename As String
Dim lBufferLen As Long
Dim lDummy As Long
Dim sBuffer() As Byte
Dim lVerPointer As Long
Dim lVerBufferLen As Long
Dim udtVerBuffer As VS_FIXEDFILEINFO
Dim rc As Long
strFilename = Space(256)
rc = GetSystemDirectory(strFilename, Len(strFilename))
strFilename = LCase(Mid(strFilename, 1, InStr(strFilename, Chr(0)) - 1))
strFilename = strFilename & "\comctl32.dll"
lBufferLen = GetFileVersionInfoSize(strFilename, lDummy)
If lBufferLen < 1 Then
CheckComCtl32Version = False
Exit Function
End If
ReDim sBuffer(lBufferLen)
rc = GetFileVersionInfo(strFilename, 0&, lBufferLen, sBuffer(0))
rc = VerQueryValue(sBuffer(0), "\", lVerPointer, lVerBufferLen)
MoveMemory udtVerBuffer, lVerPointer, Len(udtVerBuffer)
With udtVerBuffer
CheckComCtl32Version = (.iFileVersionMSh = 5 And .iFileVersionMSl >= _
80) Or .iFileVersionMSh > 5
End With
End Function Gruß
Calimero |