Je pensais que cela serait facile, mais apparemment personne ne le fait .... J'essaie de voir s'il existe une clé de registre. Peu m'importe s'il y a des valeurs à l'intérieur telles que (par défaut).
C'est ce que j'ai essayé.
Set objRegistry = GetObject("winmgmts:\\.\root\default:StdRegProv")
objRegistry.GetStringValue &H80000003,".DEFAULT\Network","",regValue
If IsEmpty(regValue) Then
Wscript.Echo "The registry key does not exist."
Else
Wscript.Echo "The registry key exists."
End If
Je veux seulement savoir si HKEY_USERES\.DEFAULT\.Network existe. Tout ce que je trouve en cherchant semble porter sur la manipulation et suppose que la clé existe, car elle est créée comme par magie si ce n’est pas le cas.
J'ai trouvé la solution.
dim bExists
ssig="Unable to open registry key"
set wshShell= Wscript.CreateObject("WScript.Shell")
strKey = "HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Digest\"
on error resume next
present = WshShell.RegRead(strKey)
if err.number<>0 then
if right(strKey,1)="\" then 'strKey is a registry key
if instr(1,err.description,ssig,1)<>0 then
bExists=true
else
bExists=false
end if
else 'strKey is a registry valuename
bExists=false
end if
err.clear
else
bExists=true
end if
on error goto 0
if bExists=vbFalse then
wscript.echo strKey & " does not exist."
else
wscript.echo strKey & " exists."
end if
La seconde des deux méthodes ici fait ce que vous voulez. Je viens de l'utiliser (après avoir trouvé aucun succès dans ce fil) et cela a fonctionné pour moi.
http://yorch.org/2011/10/two-ways-to-check-if-a-registry-key-exists-using-vbscript/
Le code:
Const HKCR = &H80000000 'HKEY_CLASSES_ROOT
Const HKCU = &H80000001 'HKEY_CURRENT_USER
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Const HKUS = &H80000003 'HKEY_USERS
Const HKCC = &H80000005 'HKEY_CURRENT_CONFIG
Function KeyExists(Key, KeyPath)
Dim oReg: Set oReg = GetObject("winmgmts:!root/default:StdRegProv")
If oReg.EnumKey(Key, KeyPath, arrSubKeys) = 0 Then
KeyExists = True
Else
KeyExists = False
End If
End Function
Le moyen le plus simple d'éviter les astuces de RegRead et de gestion des erreurs. Constantes amicales facultatives pour le registre:
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_CURRENT_CONFIG = &H80000005
Alors vérifiez avec:
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
If oReg.EnumKey(HKEY_LOCAL_MACHINE, "SYSTEM\Example\Key\", "", "") = 0 Then
MsgBox "Key Exists"
Else
MsgBox "Key Not Found"
End If
NOTES IMPORTANTES POUR LES MEMBRES CI-DESSUS:
Au cas où quelqu'un d'autre se heurterait à cela, j'ai pris l'exemple de WhoIsRich et l'ai légèrement modifié. Lors de l'appel de ReadReg, je devais effectuer les opérations suivantes: ReadReg ("App", "HKEY_CURRENT_USER\App\Version") qui serait alors en mesure de lire le numéro de version du registre, s'il existait déjà. J'utilise aussi HKCU car il ne nécessite pas de privilèges d'administrateur pour écrire.
Function ReadReg(RegKey, RegPath)
Const HKEY_CURRENT_USER = &H80000001
Dim objRegistry, oReg
Set objRegistry = CreateObject("Wscript.Shell")
Set oReg = GetObject("winmgmts:!root\default:StdRegProv")
if oReg.EnumKey(HKEY_CURRENT_USER, RegKey) = 0 Then
ReadReg = objRegistry.RegRead(RegPath)
else
ReadReg = ""
end if
End Function
Voir le scripteur! Blog:
Comment puis-je savoir si une valeur existe dans le registre?
Ils discutent de la vérification sur un ordinateur distant et montrent que si vous lisez une valeur de chaîne à partir de la clé et que la valeur est Null (par opposition à Vide), la clé n'existe pas.
En ce qui concerne l’utilisation de la méthode RegRead, si le terme "clé" désigne le chemin (ou le dossier) dans lequel les valeurs de registre sont conservées, et si les éléments feuille de cette clé sont appelés "valeurs", utilisez WshShell.RegRead (strKey) pour détecter l’existence de la clé (par opposition à l’existence de la valeur), tenez compte des éléments suivants (observés sous Windows XP):
Si strKey nom n'est pas le nom d'un chemin de registre existant, Err.Description lit "Racine non valide dans la clé de registre" ... avec un numéro d'erreur Err.Number de 0x80070002.
Si strKey nomme un chemin de registre existant mais n'inclut pas un "\" final, la méthode RegRead semble interpréter strKey comme une référence chemin\valeur plutôt que comme une référence de chemin simple et renvoie le même numéro Err.Number mais avec un code d'erreur. Description de "Impossible d'ouvrir la clé de registre". Le terme "clé" dans le message d'erreur semble signifier "valeur". Ce résultat est identique à celui obtenu lorsque strKey fait référence à un chemin\valeur où le chemin existe, mais la valeur n'existe pas.
edit (désolé je pensais que tu voulais VBA).
Chaque fois que vous essayez de lire une valeur inexistante dans le registre, vous obtenez un Null. Ainsi, tout ce que vous avez à faire est de vérifier la valeur Null.
Utilisez IsNull
pas IsEmpty
.
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
strValueName = "Test Value"
objRegistry.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
If IsNull(strValue) Then
Wscript.Echo "The registry key does not exist."
Else
Wscript.Echo "The registry key exists."
End If