Private Const HKEY_CLASSES_ROOT As Long = &H80000000
Private Const KEY_ALL_ACCESS As Long = &H3F
Private Const ERROR_SUCCESS As Long = 0&
Private Const REG_SZ As Long = 1&
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long
'
Function GetMDACVersion(Optional ByRef iMajor As Integer, Optional ByRef iMinor As Integer) As String
Dim lRet As Long, lKeyHandle As Long, sBuffer As String, sRet As String
GetMDACVersion = "0.00"
' ouvre la clé
lRet = RegOpenKeyEx(HKEY_CLASSES_ROOT, "MDACVer.Version\CurVer\", 0&, KEY_ALL_ACCESS, lKeyHandle)
If lRet = ERROR_SUCCESS Then
' la clé existe, on cherche la valeur
sBuffer = String(256, vbNullChar)
lRet = RegQueryValueEx(lKeyHandle, vbNullString, 0&, REG_SZ, sBuffer, Len(sBuffer))
If lRet = ERROR_SUCCESS Then
' pas d'erreur, vérifie la valeur pour ne récupérer que le numérique
lRet = InStrB(1, sBuffer, vbNullChar)
If lRet > 0 Then
sRet = Trim$(LeftB$(sBuffer, lRet))
GetMDACVersion = RightB$(sRet, 8)
End If
End If
' on ferme la clé
Call RegCloseKey(lKeyHandle)
End If
' on recoupe la chaine pour séparer Major/Minor
iMajor = LeftB(GetMDACVersion, 2)
iMinor = RightB(sRet, 4)
End Function