Utilisation des registre

0/5 (13 avis)

Snippet vu 13 286 fois - Téléchargée 49 fois

Contenu du snippet

Juste un exemple complet que j'ai recupere je ne sais ou,mais qui permet de lire et d'ecrire dans la base de registre.
Apres certains adaptations,je l'ai mis dans un module que j'utilise dans tous mes programmes.

Source / Exemple :


[CodeVB]
' Ce module lit et écrit les clés de la base de registres. Contrairement
' aux méthodes d'accès à la base de regitres interne de VB, il peut lire
' et écrire toute les clés du registre avec des valeurs de type chaîne.

Option Explicit
'---------------------------------------------------------------
'- Déclarations des API de base de registres...
'---------------------------------------------------------------
Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByRef phkResult As Long, ByRef lpdwDisposition As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32" 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 RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long

'---------------------------------------------------------------
'- Constantes des API de base de registres...
'---------------------------------------------------------------
' Types de données de base de registres...
Const REG_SZ = 1                                ' chaîne Unicode terminée par nul
Const REG_EXPAND_SZ = 2                         ' chaîne Unicode terminée par nul
Const REG_DWORD = 4                             ' nombre 32-bit

' Valeurs de type de création...
Const REG_OPTION_NON_VOLATILE = 0               ' clé préservée lorsque le système
                                                ' est redémarré

' Options de sécurité de clé de base de registres...
Const READ_CONTROL = &H20000
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const KEY_READ = KEY_QUERY_VALUE + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + READ_CONTROL
Const KEY_WRITE = KEY_SET_VALUE + KEY_CREATE_SUB_KEY + READ_CONTROL
Const KEY_EXECUTE = KEY_READ
Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + _
                       KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + _
                       KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL
                     
' Types de clé Racine de la base de registres...
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004

' Valeur renvoyée...
Const ERROR_NONE = 0
Const ERROR_BADKEY = 2
Const ERROR_ACCESS_DENIED = 8
Const ERROR_SUCCESS = 0

'---------------------------------------------------------------
'- Type Security_Attributes de la base de registres...
'---------------------------------------------------------------
Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Boolean
End Type

' Ce module lit et écrit les clés du registre.
' Contrairement aux méthodes d'accès au registre interne de VB, il peut lire et
' écrire toutes les clés du registre avec des valeurs de chaîne.

'-------------------------------------------------------------------------------
'Exemple d'utilisation - Debug.Print UpdateKey(HKEY_CLASSES_ROOT, "NomClé", "NouvelleValeur")
'-------------------------------------------------------------------------------
Public Function UpdateKey(ByVal KeyRoot As Long, KeyName As String, SubKeyName As String, SubKeyValue As String) As Boolean
    Dim rc As Long                                      ' Code renvoyé
    Dim hKey As Long                                    ' Descripteur de
                                                        ' clé de la base de registres
    Dim hDepth As Long                                  '
    Dim lpAttr As SECURITY_ATTRIBUTES                   ' Type Sécurité
                                                        ' de la base de registres
    
    lpAttr.nLength = 50                                 ' Affecte les valeurs
                                                        ' par défaut des
                                                        ' attributs de sécurité
    lpAttr.lpSecurityDescriptor = 0                     ' ...
    lpAttr.bInheritHandle = True                        ' ...

    '------------------------------------------------------------
    '- Crée/Ouvre une clé de base de registres...
    '------------------------------------------------------------
    rc = RegCreateKeyEx(KeyRoot, KeyName, _
                        0, REG_SZ, _
                        REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpAttr, _
                        hKey, hDepth)                   ' Crée/Ouvre //KeyRoot//KeyName
    
    If (rc <> ERROR_SUCCESS) Then GoTo CreateKeyError   ' Gestion des erreurs...
    
    '------------------------------------------------------------
    '- Crée/Modifie une valeur de clé...
    '------------------------------------------------------------
    If (SubKeyValue = "") Then SubKeyValue = " "        ' Un espace est nécessaire pour que
                                                        ' la fonction RegSetValueEx() fonctionne
    
    ' Crée/Modifie une valeur de clé
    rc = RegSetValueEx(hKey, SubKeyName, _
                       0, REG_SZ, _
                       SubKeyValue, LenB(StrConv(SubKeyValue, vbFromUnicode)))
                       
    If (rc <> ERROR_SUCCESS) Then GoTo CreateKeyError   ' Gestion des erreurs
    '------------------------------------------------------------
    '- Ferme une clé de base de registres...
    '------------------------------------------------------------
    rc = RegCloseKey(hKey)                              ' Ferme la clé
    
    UpdateKey = True                                    ' Renvoie succès
    Exit Function                                       ' Quitte
CreateKeyError:
    UpdateKey = False                                   ' Définit le code de renvoi d'erreur
    rc = RegCloseKey(hKey)                              ' Tentative de fermeture de clé
End Function

'-------------------------------------------------------------------------------
'Exemple d'utilisation - Debug.Print GetKeyValue(HKEY_CLASSES_ROOT, "COMCTL.ListviewCtrl.1\CLSID", "")
'-------------------------------------------------------------------------------
Public Function GetKeyValue(ByVal KeyRoot As Long, KeyName As String, SubKeyRef As String) As String
    Dim i As Long                    ' Compteur de boucle
    Dim rc As Long                   ' Code renvoyé
    Dim hKey As Long                 ' Descripteur de clé de base de registres ouverte
    Dim hDepth As Long                                      '
    Dim sKeyVal As String
    Dim lKeyValType As Long          ' Type de données d'une clé de base de registres
    Dim tmpVal As String             ' Stockage temporaire d'une valeur de clé de base de registres
    Dim KeyValSize As Long           ' Taille d'une variable clé de base de registres
    
    ' Ouvre RegKey sous KeyRoot {HKEY_LOCAL_MACHINE...}
    '------------------------------------------------------------
    rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) ' Ouvre la clé de base de registres
    
    If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError              ' Gestion des erreurs
    
    tmpVal = String$(1024, 0)                                   ' Alloue de l'espace pour la variable
    KeyValSize = 1024                                           ' Définit la taille de la variable
    
    '------------------------------------------------------------
    ' Récupère une valeur de clé de base de registres...
    '------------------------------------------------------------
    rc = RegQueryValueEx(hKey, SubKeyRef, 0, _
              lKeyValType, tmpVal, KeyValSize)                  ' Lit/Crée une valeur de clé
                        
    If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError              ' Gestion des erreurs
      
    tmpVal = Left$(tmpVal, InStr(tmpVal, Chr(0)) - 1)

    '------------------------------------------------------------
    ' Détermine le type de valeur de clé pour la conversion...
    '------------------------------------------------------------
    Select Case lKeyValType                                     ' Recherche des types de données...
    Case REG_SZ, REG_EXPAND_SZ                                  ' Type de données String de clé de base de registres
        sKeyVal = tmpVal                                        ' Copie la valeur String
    Case REG_DWORD                                              ' Type de données Double Word de clé de base de registres
        For i = Len(tmpVal) To 1 Step -1                        ' Convertit chaque bit
            sKeyVal = sKeyVal + Hex(Asc(Mid(tmpVal, i, 1)))     ' Génère la valeur car. par car.
        Next
        sKeyVal = Format$("&h" + sKeyVal)                       ' Convertit le type Double Word en String
    End Select
    
    GetKeyValue = sKeyVal                                       ' Valeur renvoyée
    rc = RegCloseKey(hKey)                                      ' Ferme la clé de base de registres
    Exit Function                                               ' Quitte
    
GetKeyError:                                                    ' Nettoyage après apparition d'une erreur...
    GetKeyValue = vbNullString                                  ' Affecte une chaîne vide à la valeur renvoyée
    rc = RegCloseKey(hKey)                                      ' Ferme la clé de base de registres
End Function
/CodeVB

Conclusion :


Pas mal utile.
NB : J'ai pas de Zippeur alors faites un Copier-coller [:)]
Bonne Progr a tous

A voir également

Ajouter un commentaire Commentaires
Je souhaite récupérer le chemin du dossier "Mes documents". Je fais :
MsgBox GetKeyValue(HKEY_CURRENT_USER, "SoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders", "Personal")

Mais j'obtiens toujours une chaine vide.
tu pourrais le refaire sans les commentaires SVP pcq c'est trop chiant a effacer ;-)

PS; WWW.WINZIP.COM
yea man c cool merci
cs_jroc Messages postés 5 Date d'inscription samedi 28 octobre 2000 Statut Membre Dernière intervention 24 avril 2005
18 sept. 2002 à 16:56
Je trouve que cette source est la meilleur consernant l'acces a la base registre, c'est la seul avec autant de commentaire et en plus il sont en FRANCAIS !

A ce qui disent qu'ils peuvent faire pareil en VBS je leur repondrais que la plupart des antivirus actuel bloque le vbs, alors si vous ne voulez pas que votre programme sois considere comme un virus : oubliez le vbs
stiac Messages postés 1 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 2 octobre 2003
2 oct. 2003 à 17:25
Bonjour,

J'aimerai ajouter une valeur dans la clé suivante : HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnce mais cela ne veut pas fonctionner.
Exemple Test1 pour le nom et test.bat pour les données.
Quels est la syntaxe à envoyer dans UpdateKey ???

La syntaxe suivante ne fonctionne pas UpdateKey HKEY_LOCAL_MACHINE, "SOFTWAREMicrosoftWindowsCurrentVersionRunOnce", "test1", "C: est.BAT"

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.