Registre: comment lire les clés dans une clé ?

themaste Messages postés 130 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 8 juillet 2008 - 17 nov. 2003 à 11:23
spujol Messages postés 7 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 4 janvier 2010 - 17 mai 2005 à 11:35
bonjour a tous!
J'aimerais pouvoir lister les noms des clés qui se trouve dans une clé.

Pour etre concret, je voudrais avoir la liste des noms de clés de HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI dsn l but d'avoir les noms des connexion ODBC.

J'ai vu plein de trucs sur la base de registre, mais c tjrs pour lire une valeur.Donc ca ne me conviens pas.

Merci!!

5 réponses

cs_radada Messages postés 488 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 21 avril 2009 1
17 nov. 2003 à 12:05
A mon avis, essaie d'utiliser ceci :
Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long


The RegEnumKeyEx function enumerates subkeys of the specified open registry key. The function retrieves information about one subkey each time it is called.

Et voila un exemple
Const ERROR_NO_MORE_ITEMS = 259&
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_LOCAL_MACHINE = &H80000002
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
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 RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) 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, lpData As Any, lpcbData As Long) As Long
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim hKey As Long, Cnt As Long, sName As String, sData As String, Ret As Long, RetData As Long
    Const BUFFER_SIZE As Long = 255
    'Set the forms graphics mode to persistent
    Me.AutoRedraw = True
    Me.Print "RegEnumKeyEx"
    Ret = BUFFER_SIZE
    'Open the registry key
    If RegOpenKey(HKEY_LOCAL_MACHINE, "Hardware", hKey) = 0 Then
        'Create a buffer
        sName = Space(BUFFER_SIZE)
        'Enumerate the keys
        While RegEnumKeyEx(hKey, Cnt, sName, Ret, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS
            'Show the enumerated key
            Me.Print "  " + Left$(sName, Ret)
            'prepare for the next key
            Cnt = Cnt + 1
            sName = Space(BUFFER_SIZE)
            Ret = BUFFER_SIZE
        Wend
        'close the registry key
        RegCloseKey hKey
    Else
        Me.Print "  Error while calling RegOpenKey"
    End If
    Me.Print vbCrLf + "RegEnumValue"
    Cnt = 0
    'Open a registry key
    If RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion", hKey) = 0 Then
        'initialize
        sName = Space(BUFFER_SIZE)
        sData = Space(BUFFER_SIZE)
        Ret = BUFFER_SIZE
        RetData = BUFFER_SIZE
        'enumerate the values
        While RegEnumValue(hKey, Cnt, sName, Ret, 0, ByVal 0&, ByVal sData, RetData) <> ERROR_NO_MORE_ITEMS
            'show data
            If RetData > 0 Then Me.Print "  " + Left$(sName, Ret) + "=" + Left$(sData, RetData - 1)
            'prepare for next value
            Cnt = Cnt + 1
            sName = Space(BUFFER_SIZE)
            sData = Space(BUFFER_SIZE)
            Ret = BUFFER_SIZE
            RetData = BUFFER_SIZE
        Wend
        'Close the registry key
        RegCloseKey hKey
    Else
        Me.Print "  Error while calling RegOpenKey"
    End If
End Sub

0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 nov. 2003 à 12:07
RegEnumKeyEx permet de recuperer ces valeurs.
Tu mets ZERO au 1er appel dans dwIndex puis tu l'incrementes, cela en boucle tant que fonction retourne <> ERROR_NO_MORE_ITEMS.
BruNews, ciao...
0
themaste Messages postés 130 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 8 juillet 2008 2
17 nov. 2003 à 14:04
Merci a vous, j'ai reussi a faire ce que je voulais!
0
cs_radada Messages postés 488 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 21 avril 2009 1
17 nov. 2003 à 14:11
;) ;) ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
spujol Messages postés 7 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 4 janvier 2010
17 mai 2005 à 11:35
Bonjour,

Je reviens vers vous pour vous demander une chose,

Est ce que c'est possible d'avoir un Exemple sur la boucle, je n'arrive pas a rentre dans une autre sous clef aainsi de suite.
Note: le code d'origne 'KPD-Team 2001 mache bien, mais pas moyens de refaire une boucle pour aller dans une sous - sous clefs, pour avoir une branche entière d'une clef donnée.

Merci

RegEnumKeyEx permet de recuperer ces valeurs.
Tu mets ZERO au 1er appel dans dwIndex puis tu l'incrementes, cela en boucle tant que fonction retourne <> ERROR_NO_MORE_ITEMS.
BruNews, ciao...
0
Rejoignez-nous