VB6 et registre

Résolu
Le0n95 Messages postés 15 Date d'inscription vendredi 21 juillet 2006 Statut Membre Dernière intervention 27 juillet 2006 - 26 juil. 2006 à 15:48
Le0n95 Messages postés 15 Date d'inscription vendredi 21 juillet 2006 Statut Membre Dernière intervention 27 juillet 2006 - 27 juil. 2006 à 10:49
Salut à tous,

Voila j'ai besoin de vérifier la presence d'une clé dans le registre.
J'utilise une API (http://www.ilook.fsnet.co.uk/vb/vbreg.htm), j'ai réussi a récupérer des valuers que je passe en variable.
Mais impossible de faire un test sur une clé vierge...

Voici par exemple la syntaxe pour recupérer une valeur dans une variable :
mavariable = ReadRegistry(HKEY_LOCAL_MACHINE, "arborescence", "Nom valeur")

Si quelqu'un a une idée je suis preneur :)

11 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
26 juil. 2006 à 18:22
Tiens cadeau, c'est mon jour de bonté aujourd'hui :

Public Function KeyExist(ByVal Group As Long, ByVal Section As String) As String
Dim lResult As Long, lKeyValue As Long, sValue As String

On Error Resume Next
lResult = RegOpenKey(Group, Section, lKeyValue)If (lResult 0) And (Err.Number 0) Then
   sValue = "Key exist"
Else
   sValue = "Not Found"
End If
lResult = RegCloseKey(lKeyValue)
KeyExist = sValue
End Function

à mettre dans le même module que ReadRegistry.

Sevyc64  (alias Casy) <hr align ="center" size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
26 juil. 2006 à 16:08
Quel est ton problème exactement, je ne comprend pas ta question.

L'api que tu utilise te retourne "Not found" si elle ne trouve pas de valeur ou de clé correspondant à ta recherche. Ce n'est pas ce que tu cherche ?

Sevyc64  (alias Casy)<hr align="center" size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Le0n95 Messages postés 15 Date d'inscription vendredi 21 juillet 2006 Statut Membre Dernière intervention 27 juillet 2006
26 juil. 2006 à 16:25
Effectivement c'est ce que je souhaite, ca fonctionne pour une valeur mais pas pour une clé. Et c'est pour une clé que j'en ai besoin. A noter que cette clé est vide.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
26 juil. 2006 à 16:34
Mais je ne comprend pas, une clé n'est jamais vide.
Elle contient toujours au minimum une valeur de type string nommé .Default qui elle est vide. La valeur .Default est automatiquement crée par le système dès que tu crée la clé. Et elle est automatiquement recréée si tu essaye de la supprimer. Donc une clé existante n'est jamais vide.

J'ai fait plusieurs tests et en cas de blême ton api retourne "Not Found", même dans le cas ou la clé demandée n'existe pas.

Sevyc64  (alias Casy)<hr align="center" size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0

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

Posez votre question
Le0n95 Messages postés 15 Date d'inscription vendredi 21 juillet 2006 Statut Membre Dernière intervention 27 juillet 2006
26 juil. 2006 à 17:02
Je suis d'accord pour la valeur default, mais ce ne fonctionne pas.
Voici ce que j'ai fais :
path = ReadRegistry(HKEY_LOCAL_MACHINE, "\SOFTWARE\nomdulogiciel", ".default")

Il me retourne bien "Not Found", le problème c'est que cette clé existe...
J'ai essayé aussi de mettre "(Par défaut)" et même résultat.

Merci de te pencher sur mon cas ;)
0
Le0n95 Messages postés 15 Date d'inscription vendredi 21 juillet 2006 Statut Membre Dernière intervention 27 juillet 2006
26 juil. 2006 à 17:10
Je me pose la question si il faut bien utiliser "ReadRegistry" car il lui faut absolument lui donner une valeur. N'y a t'il pas une autre fonction qui s'arreterait à la clé?
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
26 juil. 2006 à 17:27
C'est justement ce que j'étais en train de regarder.

En fait je n'avais pas vraiment compris ta question. Tu veux simplement savoir s'il y a moyen de savoir si une clé existe déjà ou pas.

Il faut que tu utilise l'api windows RegOpenKeyEx. Cette fonction te retourne une valeur = 0 si elle a reussi à ouvrir la clé, sinon elle retourne une valeur différente de 0.

Voila un petit bout de code pour tester :
registrylocation = "AppEvents\Schemes\Apps\.Default\MailBeep\CleKiNExistePas"
If RegOpenKeyEx(HKEY_CURRENT_USER, registrylocation, 0, KEY_READ, hdle) = 0 Then
    MsgBox "OK"
Else
    MsgBox "Not Ok"
End If
If hdle <> 0 Then RegCloseKey (hdle)

Sevyc64  (alias Casy) <hr align ="center" size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Le0n95 Messages postés 15 Date d'inscription vendredi 21 juillet 2006 Statut Membre Dernière intervention 27 juillet 2006
26 juil. 2006 à 17:42
Effectivmeent ca pourrait etre la solution, par contre la fonction "RegOpenKeyE" je l'ai pas. C'est quel API qui faut utiliser?
Je débute en vb, faut m'excuser ^^
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
26 juil. 2006 à 17:57
C'est une api du système Windows. Il faut donc la déclarer pour pouvoir l'utiliser.

Mais si tu charger le module sur le site que tu as indiqué au début, elle est déjà déclarée.

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" ........

Il faut juste que tu te rajoute une fonction dans ce module (TestCleExiste par exemple), qui te permattra d'appeler cette api et d'en traiter le résultat. Un peu à l'image de ReadRegistry qui permet d'utiliser différentes api windows et dans traiter les résultats pour te retourner une valeur simple à utiliser.

Pour info, la fonction ReadRegistry utilise l'api RegOpenKey. Elle fait la même chose que RegOpenKeyEx, tu peux aussi l'utiliser.
RegOpenKey existe pour conserver la compatibilité avec Windows 3.1 et Windows 95. Sur les plateformes Win32 (à partir de Win98) Il est normalement conseillé d'utiliser les fonctions en *Ex quand elles existent.
C'est à toi de voir, soit RegOpenKeyEx(HKEY_CURRENT_USER, registrylocation, 0, KEY_READ, hdle), soit RegOpenKey(HKEY_CURRENT_USER, registrylocation, hdle)

Sevyc64  (alias Casy)<hr align="center" size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Le0n95 Messages postés 15 Date d'inscription vendredi 21 juillet 2006 Statut Membre Dernière intervention 27 juillet 2006
26 juil. 2006 à 18:38
Merci, je teste tout ca demain et je te tiens au courant ;)
0
Le0n95 Messages postés 15 Date d'inscription vendredi 21 juillet 2006 Statut Membre Dernière intervention 27 juillet 2006
27 juil. 2006 à 10:49
Merci ca fonctionne nickel :D
J'ai eu de la chance de tombé sur ton jour de bonté !!

Ce forum est a recommandé :)
0
Rejoignez-nous