begin process at 2012 02 10 22:47:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > UNE CLASS POUR LE REGISTRE

UNE CLASS POUR LE REGISTRE


 Information sur la source

Note :
9,75 / 10 - par 4 personnes
9,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Niveau :Expert Date de création :19/09/2004 Vu / téléchargé :5 005 / 449

Auteur : Charles Racaud

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (25)
Ajouter un commentaire et/ou une note


 Description

V'là une class pour le registre
Elle gére pratiquement tous les types de valeurs
G becaup chercher mais j'y suis parvenu
Au début je voulais les REG_MULTI_SZ et les REG_DWORD mais avec les APIs.

Source

  • Option Explicit
  • '// Register _
  • {
  • Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult 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.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
  • Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
  • Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  • Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  • Private Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
  • Private Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
  • Private Declare Function RegFlushKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  • Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
  • Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
  • Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
  • '// Registry section definitions
  • Public Enum eHKey
  • HKEY_CLASSES_ROOT = &H80000000
  • HKEY_CURRENT_USER = &H80000001
  • HKEY_LOCAL_MACHINE = &H80000002
  • HKEY_USERS = &H80000003
  • HKEY_PERFORMANCE_DATA = &H80000004
  • HKEY_CURRENT_CONFIG = &H80000005
  • HKEY_DYN_DATA = &H80000006
  • End Enum
  • '// Registry value type definitions
  • Public Enum eRegMode
  • REG_NONE = 0 '// No value type
  • REG_SZ = 1 '// Unicode nul terminated string
  • REG_EXPAND_SZ = 2 '// Unicode nul terminated string
  • REG_BINARY = 3 '// Free form binary
  • REG_DWORD = 4 '// 32-bit number
  • REG_DWORD_LITTLE_ENDIAN = 4 '// 32-bit number (same as REG_DWORD)
  • REG_DWORD_BIG_ENDIAN = 5 '// 32-bit number
  • REG_LINK = 6 '// Symbolic Link (unicode)
  • REG_MULTI_SZ = 7 '// Multiple Unicode strings
  • REG_RESOURCE_LIST = 8 '// Resource list in the resource map
  • REG_FULL_RESOURCE_DESCRIPTOR = 9 '// Resource list in the hardware description
  • REG_RESOURCE_REQUIREMENTS_LIST = 10
  • End Enum
  • Public Type tValue
  • Name As String
  • Type As eRegMode
  • Value As Variant
  • End Type
  • '// Security Mask constants
  • Private Const READ_CONTROL = &H20000
  • Private Const SYNCHRONIZE = &H100000
  • Private Const STANDARD_RIGHTS_ALL = &H1F0000
  • Private Const STANDARD_RIGHTS_READ = READ_CONTROL
  • Private Const STANDARD_RIGHTS_WRITE = READ_CONTROL
  • Private Const KEY_QUERY_VALUE = &H1
  • Private Const KEY_SET_VALUE = &H2
  • Private Const KEY_CREATE_SUB_KEY = &H4
  • Private Const KEY_ENUMERATE_SUB_KEYS = &H8
  • Private Const KEY_NOTIFY = &H10
  • Private Const KEY_CREATE_LINK = &H20
  • Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
  • Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
  • Private Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
  • Private Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
  • '// Codes returned by Reg API calls
  • Private Const ERROR_NONE = 0
  • Private Const ERROR_BADDB = 1
  • Private Const ERROR_BADKEY = 2
  • Private Const ERROR_CANTOPEN = 3
  • Private Const ERROR_CANTREAD = 4
  • Private Const ERROR_CANTWRITE = 5
  • Private Const ERROR_OUTOFMEMORY = 6
  • Private Const ERROR_INVALID_PARAMETER = 7
  • Private Const ERROR_ACCESS_DENIED = 8
  • Private Const ERROR_INVALID_PARAMETERS = 87
  • Private Const ERROR_NO_MORE_ITEMS = 259 ' _
  • }
  • '/////////////////////////////////////////////////////////////////////////////
  • '// Fonctions pour les opèrations sur le registre {
  • '/////////////////////////////////////////////////////////////////////////////
  • '// Fonction pour sauver une donné dans le registre _
  • {
  • Public Function WriteRegistry(ByVal hKey As eHKey, ByVal Section As String, ByVal Key As String, ByVal RegMode As eRegMode, ByVal Value As Variant)
  • Dim KeyValue As Long
  • Call RegCreateKey(hKey, Section, KeyValue) '// Ouverture
  • If RegMode = REG_DWORD Then '// Si c'est une valeur DWORD
  • Call RegSetValueExLong(KeyValue, Key, 0&, RegMode, CLng(Value), 4) '// On écrit une valeur de type long
  • Else
  • If RegMode = REG_SZ Then Value = Value + Chr(0) '// Si c une SZ, on ajoute un 0
  • Call RegSetValueExString(KeyValue, Key, 0&, RegMode, Value, Len(Value)) '// On écrit une valeur de type texte
  • End If
  • Call RegFlushKey(KeyValue)
  • Call RegCloseKey(KeyValue)
  • End Function ' _
  • }
  • '/////////////////////////////////////////////////////////////////////////////
  • '// Fonction pour lire une donnée du registre _
  • {
  • Public Function ReadRegistry(ByVal hKey As eHKey, ByVal Section As String, ByVal Key As String) As String
  • Dim KeyValue As Long
  • Dim RegMode As eRegMode
  • On Error Resume Next
  • Call RegOpenKey(hKey, Section, KeyValue) '// Ouverture
  • ReadRegistry = Space$(2048)
  • Call RegQueryValueEx(KeyValue, Key, 0&, RegMode, ReadRegistry, Len(ReadRegistry))
  • If Err.Number = 0 Then
  • If RegMode = REG_DWORD Then '// Si c'est une valeur DWORD
  • ReadRegistry = Format$(Asc(Mid$(ReadRegistry, 1, 1)) + &H100& * Asc(Mid$(ReadRegistry, 2, 1)) + &H10000 * Asc(Mid$(ReadRegistry, 3, 1)) + &H1000000 * CDbl(Asc(Mid$(ReadRegistry, 4, 1))), "000") '// On converti le format en décimal
  • ElseIf RegMode = REG_BINARY Then '// Si cest une valeur BINARY
  • ReadRegistry = Left$(ReadRegistry, Len(ReadRegistry)) '// On lit la valeur
  • Else '// Sinon
  • ReadRegistry = Left$(ReadRegistry, InStr(ReadRegistry, Chr(0)) - 1) '// lit avant le 0
  • End If
  • End If
  • Call RegCloseKey(KeyValue) '// Fermeture
  • End Function ' _
  • }
  • '/////////////////////////////////////////////////////////////////////////////
  • '// Fonction pour lire toute les clé contenu dans une clé _
  • {
  • Public Function ReadRegistryKeys(ByVal hKey As eHKey, ByVal Section As String, ByRef KeyName() As String)
  • Dim KeyValue As Long
  • Dim sValue As String
  • Dim Idx As Long
  • Call RegOpenKey(hKey, Section, KeyValue) '// Ouverture
  • Do
  • sValue = Space$(2048)
  • If (RegEnumKey(KeyValue, Idx, sValue, Len(sValue)) = 0) And (Err.Number = 0) Then '// Si on trouve une clé ...
  • ReDim Preserve KeyName(Idx) As String '// Redimmentionne le tableau
  • KeyName(Idx) = Left$(sValue, InStr(sValue, Chr(0)) - 1) '// Extrait le nom de la clé
  • Else '// Si on trouve pas de clé, c que c la fin
  • Exit Do '// On quitte la boucle
  • End If
  • Idx = Idx + 1 '// Incrément de l'index de clé
  • Loop
  • Call RegCloseKey(KeyValue) '// Fermeture
  • End Function ' _
  • }
  • '/////////////////////////////////////////////////////////////////////////////
  • '// Fonction pour lire toute les valeur contenu dans une clé avec leur type et leur noms _
  • {
  • Public Function ReadRegistryValues(ByVal hKey As eHKey, ByVal Section As String, ByRef ValName() As tValue)
  • Dim KeyValue As Long
  • Dim RegMode As eRegMode
  • Dim lValueLength As Long
  • Dim lValueNameLength As Long
  • Dim sValueName As String
  • Dim sValue As String
  • Dim Idx As Long
  • Call RegOpenKey(hKey, Section, KeyValue) '// Ouverture
  • Do '// Début de la boucle principale
  • sValue = Space$(2048)
  • sValueName = Space$(2048)
  • lValueLength = Len(sValue)
  • lValueNameLength = Len(sValueName)
  • If (RegEnumValue(KeyValue, Idx, sValueName, lValueNameLength, 0&, RegMode, sValue, lValueLength) = 0) And (Err.Number = 0) Then '// Si on trouve une valeur ...
  • sValueName = Left$(sValueName, lValueNameLength) '// On en extrait le nom
  • sValue = ReadRegistry(hKey, Section, sValueName) '// et la valeur
  • ReDim Preserve ValName(Idx) As tValue '// Redimmentionne le tableau
  • ValName(Idx).Name = sValueName '// Nom de la valeur
  • ValName(Idx).Type = RegMode '// Le type
  • ValName(Idx).Value = sValue '// La valeur
  • Else '// Si on trouve pas de valeur, c que c la fin
  • Exit Do '// On quitte la boucle
  • End If
  • Idx = Idx + 1 '// Incrément de l'index de valeur
  • Loop
  • Call RegCloseKey(KeyValue) '// Fermeture
  • End Function ' _
  • }
  • '/////////////////////////////////////////////////////////////////////////////
  • '// Fonction pour supprimer une valeur du registre _
  • {
  • Public Function DeleteValue(ByVal hKey As eHKey, ByVal Section As String, ByVal Key As String)
  • Dim KeyValue As Long
  • Call RegOpenKey(hKey, Section, KeyValue) '// Ouverture
  • Call RegDeleteValue(KeyValue, Key) '// Supprime la valeur
  • Call RegCloseKey(KeyValue) '// Fermeture
  • End Function ' _
  • } _
  • '/////////////////////////////////////////////////////////////////////////////
  • '// Fonction pour supprimer une clé du registre avec toutes celle qui s'y trouve dedans _
  • {
  • Public Function DeleteKey(ByVal hKey As eHKey, ByVal Section As String)
  • On Error Resume Next
  • Dim KeyValue As Long
  • Dim SubKey() As String
  • Call ReadRegistryKeys(hKey, Section, SubKey) '// On cherhce les clés contenu dans la clé
  • Dim i As Integer
  • For i = 0 To UBound(SubKey) '// Boucle sur toutes les clés qui sont dans la clé
  • If Err.Number = 9 Then Exit For '// Si li n'y a pas de clé on quitte la boucle
  • Call DeleteKey(hKey, Section & "\" & SubKey(i)) '// Rapelle la fonction pour supprimer les clés qui sont dans les clés trouvé
  • Err.Clear '// Efface les erreurs
  • Call RegOpenKeyEx(hKey, vbNullChar, 0&, KEY_ALL_ACCESS, KeyValue) '// Ouverture
  • Call RegDeleteKey(KeyValue, Section & "\" & SubKey(i)) '// Supprime la clé
  • Call RegCloseKey(KeyValue) '// Fermeture
  • Next i
  • Call RegOpenKeyEx(hKey, vbNullChar, 0&, KEY_ALL_ACCESS, KeyValue) '// Ouverture
  • Call RegDeleteKey(KeyValue, Section) '// Supprime la clé du début
  • Call RegCloseKey(KeyValue) '// Fermeture
  • End Function ' _
  • } _
  • }
Option Explicit

'// Register _
{
  Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult 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.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
  Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
  Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  Private Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
  Private Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
  Private Declare Function RegFlushKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
  Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
  Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
  
  '// Registry section definitions
  Public Enum eHKey
    HKEY_CLASSES_ROOT = &H80000000
    HKEY_CURRENT_USER = &H80000001
    HKEY_LOCAL_MACHINE = &H80000002
    HKEY_USERS = &H80000003
    HKEY_PERFORMANCE_DATA = &H80000004
    HKEY_CURRENT_CONFIG = &H80000005
    HKEY_DYN_DATA = &H80000006
  End Enum
 
  '// Registry value type definitions
  Public Enum eRegMode
    REG_NONE = 0 '// No value type
    REG_SZ = 1 '// Unicode nul terminated string
    REG_EXPAND_SZ = 2 '// Unicode nul terminated string
    REG_BINARY = 3 '// Free form binary
    REG_DWORD = 4 '// 32-bit number
    REG_DWORD_LITTLE_ENDIAN = 4 '// 32-bit number (same as REG_DWORD)
    REG_DWORD_BIG_ENDIAN = 5 '// 32-bit number
    REG_LINK = 6 '// Symbolic Link (unicode)
    REG_MULTI_SZ = 7 '// Multiple Unicode strings
    REG_RESOURCE_LIST = 8 '// Resource list in the resource map
    REG_FULL_RESOURCE_DESCRIPTOR = 9 '// Resource list in the hardware description
    REG_RESOURCE_REQUIREMENTS_LIST = 10
  End Enum
  
  Public Type tValue
    Name As String
    Type As eRegMode
    Value As Variant
  End Type
  
  '// Security Mask constants
  Private Const READ_CONTROL = &H20000
  Private Const SYNCHRONIZE = &H100000
  Private Const STANDARD_RIGHTS_ALL = &H1F0000
  Private Const STANDARD_RIGHTS_READ = READ_CONTROL
  Private Const STANDARD_RIGHTS_WRITE = READ_CONTROL
  Private Const KEY_QUERY_VALUE = &H1
  Private Const KEY_SET_VALUE = &H2
  Private Const KEY_CREATE_SUB_KEY = &H4
  Private Const KEY_ENUMERATE_SUB_KEYS = &H8
  Private Const KEY_NOTIFY = &H10
  Private Const KEY_CREATE_LINK = &H20
  Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
  Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
  Private Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
  Private Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
  
  '// Codes returned by Reg API calls
  Private Const ERROR_NONE = 0
  Private Const ERROR_BADDB = 1
  Private Const ERROR_BADKEY = 2
  Private Const ERROR_CANTOPEN = 3
  Private Const ERROR_CANTREAD = 4
  Private Const ERROR_CANTWRITE = 5
  Private Const ERROR_OUTOFMEMORY = 6
  Private Const ERROR_INVALID_PARAMETER = 7
  Private Const ERROR_ACCESS_DENIED = 8
  Private Const ERROR_INVALID_PARAMETERS = 87
  Private Const ERROR_NO_MORE_ITEMS = 259  ' _
}


'/////////////////////////////////////////////////////////////////////////////
'// Fonctions pour les opèrations sur le registre {
  '/////////////////////////////////////////////////////////////////////////////
  '// Fonction pour sauver une donné dans le registre _
  {
    Public Function WriteRegistry(ByVal hKey As eHKey, ByVal Section As String, ByVal Key As String, ByVal RegMode As eRegMode, ByVal Value As Variant)
    Dim KeyValue As Long
    Call RegCreateKey(hKey, Section, KeyValue) '// Ouverture
    If RegMode = REG_DWORD Then '// Si c'est une valeur DWORD
      Call RegSetValueExLong(KeyValue, Key, 0&, RegMode, CLng(Value), 4) '// On écrit une valeur de type long
    Else
      If RegMode = REG_SZ Then Value = Value + Chr(0) '// Si c une SZ, on ajoute un 0
      Call RegSetValueExString(KeyValue, Key, 0&, RegMode, Value, Len(Value)) '// On écrit une valeur de type texte
    End If
    Call RegFlushKey(KeyValue)
    Call RegCloseKey(KeyValue)
    End Function ' _
  }

  '/////////////////////////////////////////////////////////////////////////////
  '// Fonction pour lire une donnée du registre _
  {
    Public Function ReadRegistry(ByVal hKey As eHKey, ByVal Section As String, ByVal Key As String) As String
    Dim KeyValue As Long
    Dim RegMode As eRegMode
    On Error Resume Next
    Call RegOpenKey(hKey, Section, KeyValue) '// Ouverture
    ReadRegistry = Space$(2048)
    Call RegQueryValueEx(KeyValue, Key, 0&, RegMode, ReadRegistry, Len(ReadRegistry))
    If Err.Number = 0 Then
      If RegMode = REG_DWORD Then '// Si c'est une valeur DWORD
        ReadRegistry = Format$(Asc(Mid$(ReadRegistry, 1, 1)) + &H100& * Asc(Mid$(ReadRegistry, 2, 1)) + &H10000 * Asc(Mid$(ReadRegistry, 3, 1)) + &H1000000 * CDbl(Asc(Mid$(ReadRegistry, 4, 1))), "000") '// On converti le format en décimal
      ElseIf RegMode = REG_BINARY Then '// Si cest une valeur BINARY
        ReadRegistry = Left$(ReadRegistry, Len(ReadRegistry)) '// On lit la valeur
      Else '// Sinon
        ReadRegistry = Left$(ReadRegistry, InStr(ReadRegistry, Chr(0)) - 1) '// lit avant le 0
      End If
    End If
    Call RegCloseKey(KeyValue) '// Fermeture
    End Function ' _
  }

  '/////////////////////////////////////////////////////////////////////////////
  '// Fonction pour lire toute les clé contenu dans une clé _
  {
    Public Function ReadRegistryKeys(ByVal hKey As eHKey, ByVal Section As String, ByRef KeyName() As String)
    Dim KeyValue As Long
    Dim sValue As String
    Dim Idx As Long
    Call RegOpenKey(hKey, Section, KeyValue) '// Ouverture
    Do
      sValue = Space$(2048)
      If (RegEnumKey(KeyValue, Idx, sValue, Len(sValue)) = 0) And (Err.Number = 0) Then '// Si on trouve une clé ...
        ReDim Preserve KeyName(Idx) As String '// Redimmentionne le tableau
        KeyName(Idx) = Left$(sValue, InStr(sValue, Chr(0)) - 1) '// Extrait le nom de la clé
      Else '// Si on trouve pas de clé, c que c la fin
         Exit Do '// On quitte la boucle
      End If
      Idx = Idx + 1 '// Incrément de l'index de clé
    Loop
    Call RegCloseKey(KeyValue) '// Fermeture
    End Function ' _
  }

  '/////////////////////////////////////////////////////////////////////////////
  '// Fonction pour lire toute les valeur contenu dans une clé avec leur type et leur noms _
  {
    Public Function ReadRegistryValues(ByVal hKey As eHKey, ByVal Section As String, ByRef ValName() As tValue)
    Dim KeyValue As Long
    Dim RegMode As eRegMode
    Dim lValueLength As Long
    Dim lValueNameLength As Long
    Dim sValueName As String
    Dim sValue As String
    Dim Idx As Long
    Call RegOpenKey(hKey, Section, KeyValue) '// Ouverture
    Do '// Début de la boucle principale
      sValue = Space$(2048)
      sValueName = Space$(2048)
      lValueLength = Len(sValue)
      lValueNameLength = Len(sValueName)
      If (RegEnumValue(KeyValue, Idx, sValueName, lValueNameLength, 0&, RegMode, sValue, lValueLength) = 0) And (Err.Number = 0) Then '// Si on trouve une valeur ...
        sValueName = Left$(sValueName, lValueNameLength) '// On en extrait le nom
        sValue = ReadRegistry(hKey, Section, sValueName) '// et la valeur
        ReDim Preserve ValName(Idx) As tValue '// Redimmentionne le tableau
        ValName(Idx).Name = sValueName '// Nom de la valeur
        ValName(Idx).Type = RegMode '// Le type
        ValName(Idx).Value = sValue '// La valeur
      Else '// Si on trouve pas de valeur, c que c la fin
        Exit Do '// On quitte la boucle
      End If
      Idx = Idx + 1 '// Incrément de l'index de valeur
    Loop
    Call RegCloseKey(KeyValue) '// Fermeture
    End Function ' _
  }

  '/////////////////////////////////////////////////////////////////////////////
  '// Fonction pour supprimer une valeur du registre _
  {
    Public Function DeleteValue(ByVal hKey As eHKey, ByVal Section As String, ByVal Key As String)
    Dim KeyValue As Long
    Call RegOpenKey(hKey, Section, KeyValue) '// Ouverture
    Call RegDeleteValue(KeyValue, Key) '// Supprime la valeur
    Call RegCloseKey(KeyValue) '// Fermeture
    End Function ' _
  } _

  '/////////////////////////////////////////////////////////////////////////////
  '// Fonction pour supprimer une clé du registre avec toutes celle qui s'y trouve dedans _
  {
    Public Function DeleteKey(ByVal hKey As eHKey, ByVal Section As String)
    On Error Resume Next
    Dim KeyValue As Long
    Dim SubKey() As String
    Call ReadRegistryKeys(hKey, Section, SubKey) '// On cherhce les clés contenu dans la clé
    Dim i As Integer
    For i = 0 To UBound(SubKey) '// Boucle sur toutes les clés qui sont dans la clé
      If Err.Number = 9 Then Exit For '// Si li n'y a pas de clé on quitte la boucle
      Call DeleteKey(hKey, Section & "\" & SubKey(i)) '// Rapelle la fonction pour supprimer les clés qui sont dans les clés trouvé
      Err.Clear '// Efface les erreurs
      Call RegOpenKeyEx(hKey, vbNullChar, 0&, KEY_ALL_ACCESS, KeyValue) '// Ouverture
      Call RegDeleteKey(KeyValue, Section & "\" & SubKey(i)) '// Supprime la clé
      Call RegCloseKey(KeyValue) '// Fermeture
    Next i
    Call RegOpenKeyEx(hKey, vbNullChar, 0&, KEY_ALL_ACCESS, KeyValue) '// Ouverture
    Call RegDeleteKey(KeyValue, Section) '// Supprime la clé du début
    Call RegCloseKey(KeyValue) '// Fermeture
    End Function ' _
  } _
}

 Conclusion

Pas d'erreur connu.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture JEU SPACEOID (EXEMPLE D'UTILISATION DE CLASSES, INTERFACES E...
Source avec Zip Source avec une capture CONTRÔLE LINKLABEL (SYSLINK) HYPERTEXT
Source avec Zip Source avec une capture HYPERHAUTID
Source avec Zip Source avec une capture ADDIN: BARRE D'ONGLETS POUR VISUAL BASIC
Source avec Zip EXTRACTION DES ICÔNES DES MENU D'OFFICE

 Sources de la même categorie

Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER par ShareVB
Source avec Zip Source avec une capture DESACTIVER / ACTIVER LES MISES EN VEILLES PC par Arsena

Commentaires et avis

Commentaire de Renfield le 20/09/2004 22:32:59 administrateur CS

Complet, et avec gestion d'erreurs.....

bien joué

Commentaire de econs le 21/09/2004 09:27:10 administrateur CS

Propre et bien commenté également. Ca fait plaisir :o)

Commentaire de DeadlyPredator le 22/09/2004 06:10:50

Remarque :
utiliser un do ... loop (sans conditions pour sortir) à la place d'un do ... loop (while/until) ...
réduit les performances de la boucle

Je crois qu'utiliser Call ralentit l'appel de la fonction.

C'est très interressant. Je verrais bien une tlb pour les APIs et les énumérations car cela aiderait à avoir un appel aux APIs encore plus rapide. Peut-être aussi une Dll ActiveX.

En parlant, je déteste quand un code est "trop" documenté car c'est fatigant de voir plein de vert partout dans le code ;-). C'est par contre bien d'avoir certaines lignes commentées.

Commentaire de bmouget le 04/12/2004 13:33:45

nickel, exactement ce que je cherchais !

Merci

Commentaire de Charles Racaud le 05/12/2004 19:23:38

Cette source est là pour aider

@+

Commentaire de nah666 le 21/01/2005 09:24:42

Beau travail bravo

Commentaire de laulaut le 03/02/2005 09:18:52

slt il ma l’aire super ton dll je mais comment je peut le utilise je suis un peut novice de ce coté la j'ai déclare la dll dans windows comme ça regsvr32 /v Registry.dll mes après je veux la utilise dans mes applis mais je arrive pas si tu peut m'aide merci

Commentaire de Charles Racaud le 05/02/2005 21:46:30

Pour l'utiliser en VB il faut la définir :
- Dans Référence (mnu Projet) il faut ajouter la dll. (Parcourir et entrer le chemin d'accés de la dll)
- Ensuite dans le code, il aut la délcarer:
Dim %VarName% As New Registry.clsRegistry
- Pour l'utiliser: %VarName%.%Function%([%Arg%])

Voilà, en avec ça tu devrais y arriver.

Commentaire de mat_inter le 26/01/2006 12:12:39

Merci, excellent.

Commentaire de dxh_master le 06/03/2006 11:29:35

bonjour je sais pas comment utiliser ces fonction pouvez vous maider?? (mexplique)

Commentaire de Renfield le 06/03/2006 12:00:01 administrateur CS

tu as juste a faire, des petits :

Dim Reg As New clsRegistry
a = Reg.ReadRegistry ( HKEY_CURRENT_USER , "bla\ma section\mon setting" , "MaValeur" )
MsgBox a

Commentaire de dxh_master le 06/03/2006 12:20:18

Erreur de compilation
Impossible de définir un type publique defini par l'utilisateur à l'interieur d'une classe.

et il me dit que c'est sa qui bug:
Public Type tValue

Commentaire de Renfield le 06/03/2006 12:25:42 administrateur CS

l'on oublie bien sur pas d'enregistrer la dll, si on n'intègre pas le cls dans son projet....(et que l'on utilise la dll ^^)

Commentaire de dxh_master le 06/03/2006 12:31:43

en fet jaimerait écrir dans la base de registre !
en fet la lire sa marche mais je voi pas comment on peut ecrir

Commentaire de Renfield le 06/03/2006 13:03:53 administrateur CS

Reg.WriteRegistry HKEY_CURRENT_USER , "bla\ma section\mon setting" , "MaValeur" , REG_SZ, "NewValue"

Commentaire de dxh_master le 06/03/2006 14:53:21

MERCI en fet sa marche pas quand je met les Reg.WriteRegistry (HKEY_CURRENT_USER , "bla\ma section\mon setting" , "MaValeur" , REG_SZ, "NewValue")

Commentaire de Renfield le 06/03/2006 15:25:19 administrateur CS

et...
et ça veux dire quoi "ca marche pas" ?  (chez moi, ca fonctionne parfaitement.)

à noter que le fichier .cls ne peut être intégré tel quel dans un projet, celui ci, qui est une traduction d'un code C++ est finalement assez mal fagoté, et quelques erreurs surviennent, avec les fonctions utilisant le type tValue.
Supprime celles-ci, ou extraies le code de WriteRegistry, et ca ira.

Commentaire de xineohp37 le 27/09/2006 10:15:18

25 allez retour sur le site afin de trouver un code de gestion de la Bdr ou la suppression de clé est faite de façon recursive ! Bon Reinfield marque un point, quelque manips mineurs à faire pour réutiliser tranquilement le tout dans un module...En dehors de ça je préfère un code complet et portable sur les différent OS Windaube que des exemples de codes certes parfait mais qui ressemble plus à de la surcharge inutile des fcts des API !
Sur ce merci encore ! Un ptit 8 pour la peine

Commentaire de xineohp37 le 27/09/2006 11:20:14

Heu....après test approfondis en fait c'est pas le top du top....
Exemple, dans DeleteKey on appel la fonction ReadRegistryKey en y passant la référence d'un tableau de chaine. Jusque là tout va bien sauf que le premier indice du tableau en VB c'est 1 et pas 0 sinon à l'affectation StringTab(0) = "toto" et ben ça plante sévère.La gestion d'erreur n'étant pas au top fo se palucher un débuggage manuel à la con....Bon de tte façon faut bien qualifier son code à un moment ou un autre mais bon.....

Commentaire de Charles Racaud le 27/09/2006 15:53:42

Oui c'est vrai que ce code n'est pas au top comme tu dis.
Il date un peu et aurait besoins d'une serieuse maj.
Par contre en vb, on à Option Base 0 par défaut et non 1. Donc le premier indice des tableau est bien 0.
La gestion d'erreur est en effet pas assez développé.

Commentaire de Renfield le 27/09/2006 16:09:35 administrateur CS

ou simplement parcourir le tableau avec LBound et Ubound

Commentaire de Charles Racaud le 27/09/2006 16:37:29

Oui, c'est encore mieux.
Bien vu RenField.

Commentaire de xineohp37 le 27/09/2006 16:54:43

C'est vrai que si je n'avais pas eu un Option Base 1 dans mon projet ça serait passé tout seul, autant pour moi ! :)
Bon sinon je viens de passer une bonne heure à reformater mon pc pour cause d'utilisation maladroite du DeleteKey récursif sur des Clsid de dll et d'ocx. Du coup, en 10 secondes (le temps que le code tourne, j'ai du paumer la moitier de HKEY_CLASSES_ROOT, et forcément, après, et ben le PC il marche moins bien....
Je l'ai pas vu venir, mais je ne peux m'en prendre qu'à moi, avis aux autres, ceci est une source à manipuler judicieusement, quand on a au moins un café dans le bide....

Commentaire de Renfield le 27/09/2006 17:06:50 administrateur CS

penser a enregistrer le registre avant ^^

enfin, Windows ne le fait il pas tout seul (derniers parametres fonctionnels..) ?

Commentaire de Charles Racaud le 27/09/2006 17:36:11

Vite je rajoute :
Attention: Je ne suis pas responsable des pertes ou endommagements de la base de registre faite avec cette source. Source à manipuler avec attention, vérifiez bien que vous manipuler les bonnes clés et données de la base de registre avant exécution du code.
^^

Sinon, oui, Windows fait une sauvegarde du registre de temps en temps.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,047 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales