OVH Cloud OVH Cloud

Suppression d'une clé du registre

2 réponses
Avatar
Nicolas
Bonjour,

J'ai la cl=E9 de registre suivante :

HKEY_CURRENT_USER\Software\Google\NavClient\1.1\History

Je souhaiterais supprimer toutes les valeurs binaires=20
contenues dedans, comment faire ?

J'ai essay=E9 avec ceci :

Set WshShell =3D CreateObject("WScript.Shell")
WshShell.RegDelete "HKEY_CURRENT_USER\Software\Google\NavCl
ient\1.1\History"

Mais =E7a me retourne que l'op=E9ration est impossible.

J'attend vos suggestions


Merci d'avance

Nicolas

2 réponses

Avatar
ng
Salut,
Tu peux tester avec l'API RegDeleteKey, voici un exemple l'utilisant :

Const HKEY_CURRENT_USER = &H80000001
Const REG_OPTION_BACKUP_RESTORE = 4 ' open for backup or restore
Const REG_OPTION_VOLATILE = 1 ' Key is not preserved when system
is rebooted
Const REG_OPTION_NON_VOLATILE = 0 ' Key is preserved when system is
rebooted
Const STANDARD_RIGHTS_ALL = &H1F0000
Const SYNCHRONIZE = &H100000
Const READ_CONTROL = &H20000
Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Const KEY_CREATE_LINK = &H20
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or
KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or
KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
Const KEY_EXECUTE = (KEY_READ)
Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or
KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long)
As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias
"RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" 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, lpSecurityAttributes As Any, phkResult As Long,
lpdwDisposition As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias
"RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal
Reserved As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail:
Dim Result As Long
'Check if the specified key exists
RegOpenKeyEx HKEY_CURRENT_USER, "KPD-Team", 0, KEY_ALL_ACCESS, Result
'If the key doesn't exist, we create it
If Result = 0 Then
'Create a new key
RegCreateKeyEx HKEY_CURRENT_USER, "KPD-Team", 0, "REG_DWORD",
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, ByVal 0&, Result, Ret
If Result = 0 Then
MsgBox "Error while creating the Key!!"
Exit Sub
End If
End If
'Delete the key
RegDeleteKey Result, ""
'close the handle
RegCloseKey Result
End Sub


--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


"Nicolas" a écrit dans le message de news:
eb2a01c3f171$17391040$
Bonjour,

J'ai la clé de registre suivante :

HKEY_CURRENT_USERSoftwareGoogleNavClient1.1History

Je souhaiterais supprimer toutes les valeurs binaires
contenues dedans, comment faire ?

J'ai essayé avec ceci :

Set WshShell = CreateObject("WScript.Shell")
WshShell.RegDelete "HKEY_CURRENT_USERSoftwareGoogleNavCl
ient1.1History"

Mais ça me retourne que l'opération est impossible.

J'attend vos suggestions


Merci d'avance

Nicolas
Avatar
Zoury
Salut Nicolas! :O)

Tu peux utiliser l'api RegEnumValue() sur la clé désirée afin d'énumérer les
valeurs de celles-ci, ensuite tu vérifie le type de valeur pour qu'il soit
égal à REG_BINARY et si c'est le cas tu supprimes. ;O)

Voici un exemple :
'***
' Module1
Option Explicit

Private Const HKEY_LOCAL_MACHINE As Long = &H80000002
Private Const REG_BINARY As Long = 3
Private Const ERROR_SUCCESS As Long = 0
Private Const ERROR_NO_MORE_ITEMS As Long = &H103

Private Declare Function RegOpenKey _
Lib "advapi32.dll" _
Alias "RegOpenKeyA" _
( _
ByVal hKey As Long, _
ByVal lpSubKey As String, _
ByRef phkResult As Long _
) As Long

Private Declare Function RegEnumValue _
Lib "advapi32.dll" _
Alias "RegEnumValueA" _
( _
ByVal hKey As Long, _
ByVal dwIndex As Long, _
ByVal lpValueName As String, _
ByRef lpcbValueName As Long, _
ByVal lpReserved As Long, _
ByRef lpType As Long, _
ByRef lpData As Byte, _
ByRef lpcbData As Long _
) As Long

Private Declare Function RegDeleteValue _
Lib "advapi32.dll" _
Alias "RegDeleteValueA" _
( _
ByVal hKey As Long, _
ByVal lpValueName As String _
) As Long

Private Declare Function RegCloseKey _
Lib "advapi32.dll" _
( _
ByVal hKey As Long _
) As Long

Private Sub Main()
Call DeleteValueByType(HKEY_LOCAL_MACHINE, "SOFTWAREMySoft",
REG_BINARY)
End Sub

Private Sub DeleteValueByType(ByRef Key As Long, ByRef SubKeyPath As String,
ByRef ValueType As Long)

Dim hKey As Long
Dim lKeyCount As Long
Dim sName As String
Dim lNameLenght As Long
Dim lType As Long
Const BUFFER_SIZE As Long = 255

If (RegOpenKey(Key, SubKeyPath, hKey) = ERROR_SUCCESS) Then

Do

sName = Space$(BUFFER_SIZE)
lNameLenght = BUFFER_SIZE

If (RegEnumValue(hKey, lKeyCount, _
sName, lNameLenght, _
0, lType, ByVal 0&, _
ByVal 0&) = ERROR_NO_MORE_ITEMS) Then
Exit Do
End If

If (lType = ValueType) Then
Call RegDeleteValue(hKey, Left$(sName, lNameLenght))
Else
lKeyCount = lKeyCount + 1
End If

Loop

Call RegCloseKey(hKey)

End If

End Sub
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous