Le0n95
Messages postés15Date d'inscriptionvendredi 21 juillet 2006StatutMembreDernière intervention27 juillet 2006
-
26 juil. 2006 à 15:48
Le0n95
Messages postés15Date d'inscriptionvendredi 21 juillet 2006StatutMembreDernière intervention27 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")
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
Le0n95
Messages postés15Date d'inscriptionvendredi 21 juillet 2006StatutMembreDernière intervention27 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.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
Vous n’avez pas trouvé la réponse que vous recherchez ?
Le0n95
Messages postés15Date d'inscriptionvendredi 21 juillet 2006StatutMembreDernière intervention27 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.
Le0n95
Messages postés15Date d'inscriptionvendredi 21 juillet 2006StatutMembreDernière intervention27 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é?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
Le0n95
Messages postés15Date d'inscriptionvendredi 21 juillet 2006StatutMembreDernière intervention27 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 ^^
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #