--- Soumis par Dev Ashish---
Lecture de valeurs dans le Registre du système.
(Q) Comment s'y prendre pour lire une valeur dans le "Registre" du système?
(A) Utiliser la fonction fReturnRegKeyValue tel qu'illustré ci-dessous. (Note: Ce code risque fortement d'être modifié, je travaille encore à l'améliorer.)
Quelques exemples d'utilisation suivent, incluant les sorties dans la fenêtre d'exécution immédiate (Debug Window), depuis mon ordi.
?fReturnRegKeyValue(HKEY_CLASSES_ROOT, _ "Access.Application.8\Shell\Open\Command","") C:\Program Files\Microsoft Office\Office\MSACCESS.EXE /NOSTARTUP "%1" ?fReturnRegKeyValue(HKEY_LOCAL_MACHINE, _ "System\CurrentControlSet\Control\ComputerName\ComputerName", _ "ComputerName") Springfield ?fReturnRegKeyValue(HKEY_CURRENT_USER, _ "InstallLocationsMRU","MRUList") bdca --------------------------------------------
'********Code Start************** 'This code was originally written by Terry Kreft ' and Dev Ashish. 'It is not to be altered or distributed, 'except as part of an application. 'You are free to use it in any application, 'provided the copyright notice is left unchanged.
'Ce code fut originalement écrit par Terry Kreft. 'et Dev Ashish. 'Il ne doit être ni altéré, ni distribué 'sauf comme partie intégrée à une application. 'Vous êtes libre d'utiliser ce code 'à la condition de laisser cette note, sans modification.
'Code Courtesy of 'Dev Ashish & Terry Kreft ' Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const HKEY_PERFORMANCE_DATA = &H80000004 Public Const HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_DYN_DATA = &H80000006 Private Const STANDARD_RIGHTS_READ = &H20000 Private Const KEY_QUERY_VALUE = &H1& Private Const KEY_ENUMERATE_SUB_KEYS = &H8& Private Const KEY_NOTIFY = &H10& Private Const SYNCHRONIZE = &H100000 Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or _ KEY_QUERY_VALUE Or _ KEY_ENUMERATE_SUB_KEYS Or _ KEY_NOTIFY) And _ (Not SYNCHRONIZE)) Private Const MAXLEN = 256 Private Const ERROR_SUCCESS = &H0& Const REG_NONE = 0 Const REG_SZ = 1 Const REG_EXPAND_SZ = 2 Const REG_BINARY = 3 Const REG_DWORD = 4 Const REG_DWORD_LITTLE_ENDIAN = 4 Const REG_DWORD_BIG_ENDIAN = 5 Const REG_LINK = 6 Const REG_MULTI_SZ = 7 Const REG_RESOURCE_LIST = 8 Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Private Declare Function apiRegOpenKeyEx Lib "advapi32.dll" _ Alias "RegOpenKeyExA" (ByVal hKey As Long, _ ByVal lpSubKey As String, ByVal ulOptions As Long, _ ByVal samDesired As Long, ByRef phkResult As Long) _ As Long Private Declare Function apiRegCloseKey Lib "advapi32.dll" _ Alias "RegCloseKey" (ByVal hKey As Long) As Long Private Declare Function apiRegQueryValueEx Lib "advapi32.dll" _ Alias "RegQueryValueExA" (ByVal hKey As Long, _ ByVal lpValueName As String, ByVal lpReserved As Long, _ ByRef lpType As Long, lpData As Any, _ ByRef lpcbData As Long) As Long Private Declare Function apiRegQueryInfoKey Lib "advapi32.dll" _ Alias "RegQueryInfoKeyA" (ByVal hKey As Long, _ ByVal lpClass As String, ByRef lpcbClass As Long, _ ByVal lpReserved As Long, ByRef lpcSubKeys As Long, _ ByRef lpcbMaxSubKeyLen As Long, _ ByRef lpcbMaxClassLen As Long, _ ByRef lpcValues As Long, _ ByRef lpcbMaxValueNameLen As Long, _ ByRef lpcbMaxValueLen As Long, _ ByRef lpcbSecurityDescriptor As Long, _ ByRef lpftLastWriteTime As FILETIME) As Long Function fReturnRegKeyValue(ByVal lngKeyToGet As Long, _ ByVal strKeyName As String, _ ByVal strValueName As String) _ As String Dim lnghKey As Long Dim strClassName As String Dim lngClassLen As Long Dim lngReserved As Long Dim lngSubKeys As Long Dim lngMaxSubKeyLen As Long Dim lngMaxClassLen As Long Dim lngValues As Long Dim lngMaxValueNameLen As Long Dim lngMaxValueLen As Long Dim lngSecurity As Long Dim ftLastWrite As FILETIME Dim lngType As Long Dim lngData As Long Dim lngTmp As Long Dim strRet As String Dim varRet As Variant Dim lngRet As Long On Error GoTo fReturnRegKeyValue_Err 'Entre dans "l'essaim" (hive, first key) lngTmp = apiRegOpenKeyEx(lngKeyToGet, _ strKeyName, 0&, KEY_READ, lnghKey) 'Tout va bien? If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _ lngTmp + vbObjectError lngReserved = 0& strClassName = String$(MAXLEN, 0): lngClassLen = MAXLEN 'Obtenir les limites lngTmp = apiRegQueryInfoKey(lnghKey, strClassName, _ lngClassLen, lngReserved, lngSubKeys, lngMaxSubKeyLen, _ lngMaxClassLen, lngValues, lngMaxValueNameLen, _ lngMaxValueLen, lngSecurity, ftLastWrite) 'Ca s'endure? If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _ lngTmp + vbObjectError 'Capturer la valeur de la clé strRet = String$(MAXLEN - 1, 0) lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _ lngReserved, lngType, ByVal strRet, lngData) Select Case lngType Case REG_SZ lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _ lngReserved, lngType, ByVal strRet, lngData) varRet = Left(strRet, lngData - 1) Case REG_DWORD lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _ lngReserved, lngType, lngRet, lngData) varRet = lngRet Case REG_BINARY lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _ lngReserved, lngType, ByVal strRet, lngData) varRet = Left(strRet, lngData) End Select 'Tout va bien, Madame la Marquise? If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _ lngTmp + vbObjectError fReturnRegKeyValue_Exit: fReturnRegKeyValue = varRet lngTmp = apiRegCloseKey(lnghKey) Exit Function fReturnRegKeyValue_Err: varRet = "Error: Key or Value Not Found." Resume fReturnRegKeyValue_Exit End Function '********Code End**************