Sous WINDOWS 98, j'avais une proc=E9dure que l'on m'avait=20
communiqu=E9e pour lister les valeurs des cl=E9s =E0=20
l'int=E9rieur d'une cl=E9 :
Or cela ne fonctionne pas sous XP et je ne comprends pas=20
pourquoi. Peut-=EAtre =E0 cause d'un changement dans le type=20
d'une donn=E9e.
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D
Voici les deux proc=E9dures sous EXCEL 97
Sub ListerToutesValeurs()
Dim Compteur As Long
Dim ssave As String
Dim hkey As Long
Dim x
Workbooks.Add
RegOpenKey HKEY_CURRENT_USER, "Software\cbr\ConvertHTML",=20
hkey
Do
ssave =3D String(255, 0)
If RegEnumValue(hkey, Compteur, ssave, 255, 0, ByVal 0&,=20
ByVal 0&, ByVal 0&) <> 0 Then Exit Do
x =3D GetKeyValue
(HKEY_CURRENT_USER, "Software\cbr\ConvertHTML",=20
StripTerminator(ssave))
'Debug.Print StripTerminator(ssave) pour r=E9cup=E9rer le=20
nom de l'entr=E9e
'Debug.Print x pour r=E9cup=E9rer la valeur
Compteur =3D Compteur + 1
Range("A" & Compteur + 1) =3D StripTerminator(ssave)
Range("B" & Compteur + 1) =3D x
Loop
RegCloseKey hkey
End Sub
'=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D
Private Function StripTerminator(ByVal sInput As String)=20
As String
'Cette fonction sert =E0 =E9l=E9miner tous les caract=E8res=20
superflus de la valeur
'de l'entr=E9e r=E9cup=E9r=E9e. ex Police:=3DArial:::::::: =3D Arial
Dim ZeroPos As Integer
ZeroPos =3D InStr(1, sInput, vbNullChar)
If ZeroPos > 0 Then
StripTerminator =3D Left$(sInput, ZeroPos - 1)
Else
StripTerminator =3D sInput
End If
End Function
'=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D
Do While RC = ERROR_SUCCESS x = GetKeyValue (HKEY_CURRENT_USER, _ "SoftwarecbrConvertHTML", StripTerminator(ssave)) 'Debug.Print StripTerminator(ssave) _ pour récupérer le nom de l'entrée 'Debug.Print x pour récupérer la valeur Compteur = Compteur + 1 Range("A" & Compteur + 1) = StripTerminator(ssave) Range("B" & Compteur + 1) = x
(tiré de la documentation de l'API RegEnumValue: hKey [In] Handle to an open key. The key must have been opened with the KEY_QUERY_VALUE access right. For more information, see Registry Key Security and Access Rights. )
RegOpenKeyEx est compatible avec: Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, and Windows 95. Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server.
RegOpenKey n'a été gardé que pour des raisons de compatibilité avec win-16.
Les nouvelles déclarations sont les suivantes: Declare Function RegOpenKeyEx _ Lib "advapi32.dll" _ Alias "RegOpenKeyExA" _ ( _ ByVal hKey As Long, _ ByVal lpSubKey As String, _ ByVal ulOptions As Long, _ ByVal samDesired As Long, _ phkResult As Long _ ) _ As Long
Enum REG_ACCESSRIGHTS KEY_QUERY_VALUE = (&H1) KEY_SET_VALUE = (&H2) KEY_CREATE_SUB_KEY = (&H4) KEY_ENUMERATE_SUB_KEYS = (&H8) KEY_NOTIFY = (&H10) KEY_CREATE_LINK = (&H20) KEY_WOW64_32KEY = (&H200) KEY_WOW64_64KEY = (&H100) KEY_WOW64_RES = (&H300) KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE)) KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE)) 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)) End Enum
-- François Picalausa (MVP VB) http://faq.vb.free.fr --- http://msdn.microsoft.com http://apisvb.europe.webmatrixhosting.net
"" a écrit dans le message de news:1fc8e01c458ec$b0f949b0$
Bonjour,
Sous WINDOWS 98, j'avais une procédure que l'on m'avait communiquée pour lister les valeurs des clés à l'intérieur d'une clé : Or cela ne fonctionne pas sous XP et je ne comprends pas pourquoi. Peut-être à cause d'un changement dans le type d'une donnée.
Hello,
As-tu *tous* les droits sur la clé?
Sinon, essaye ceci:
Dim hKey As Long, RC As Long
If RegOpenKeyEx(lngRoot, strKeyPath & vbNullChar, _
0, REG_ACCESSRIGHTS.KEY_QUERY_VALUE, _
hKey) = ERROR_SUCCESS Then
Do While RC = ERROR_SUCCESS
x = GetKeyValue (HKEY_CURRENT_USER, _
"SoftwarecbrConvertHTML", StripTerminator(ssave))
'Debug.Print StripTerminator(ssave) _
pour récupérer le nom de l'entrée
'Debug.Print x pour récupérer la valeur
Compteur = Compteur + 1
Range("A" & Compteur + 1) = StripTerminator(ssave)
Range("B" & Compteur + 1) = x
(tiré de la documentation de l'API RegEnumValue:
hKey
[In] Handle to an open key. The key must have been opened with the
KEY_QUERY_VALUE access right. For more information, see Registry Key
Security and Access Rights. )
RegOpenKeyEx est compatible avec:
Client: Included in Windows XP, Windows 2000 Professional, Windows NT
Workstation, Windows Me, Windows 98, and Windows 95.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT
Server.
RegOpenKey n'a été gardé que pour des raisons de compatibilité avec win-16.
Les nouvelles déclarations sont les suivantes:
Declare Function RegOpenKeyEx _
Lib "advapi32.dll" _
Alias "RegOpenKeyExA" _
( _
ByVal hKey As Long, _
ByVal lpSubKey As String, _
ByVal ulOptions As Long, _
ByVal samDesired As Long, _
phkResult As Long _
) _
As Long
Enum REG_ACCESSRIGHTS
KEY_QUERY_VALUE = (&H1)
KEY_SET_VALUE = (&H2)
KEY_CREATE_SUB_KEY = (&H4)
KEY_ENUMERATE_SUB_KEYS = (&H8)
KEY_NOTIFY = (&H10)
KEY_CREATE_LINK = (&H20)
KEY_WOW64_32KEY = (&H200)
KEY_WOW64_64KEY = (&H100)
KEY_WOW64_RES = (&H300)
KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or
KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or
KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
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))
End Enum
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"cbr@aol.fr" <anonymous@discussions.microsoft.com> a écrit dans le
message de news:1fc8e01c458ec$b0f949b0$a601280a@phx.gbl
Bonjour,
Sous WINDOWS 98, j'avais une procédure que l'on m'avait
communiquée pour lister les valeurs des clés à
l'intérieur d'une clé :
Or cela ne fonctionne pas sous XP et je ne comprends pas
pourquoi. Peut-être à cause d'un changement dans le type
d'une donnée.
Do While RC = ERROR_SUCCESS x = GetKeyValue (HKEY_CURRENT_USER, _ "SoftwarecbrConvertHTML", StripTerminator(ssave)) 'Debug.Print StripTerminator(ssave) _ pour récupérer le nom de l'entrée 'Debug.Print x pour récupérer la valeur Compteur = Compteur + 1 Range("A" & Compteur + 1) = StripTerminator(ssave) Range("B" & Compteur + 1) = x
(tiré de la documentation de l'API RegEnumValue: hKey [In] Handle to an open key. The key must have been opened with the KEY_QUERY_VALUE access right. For more information, see Registry Key Security and Access Rights. )
RegOpenKeyEx est compatible avec: Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, and Windows 95. Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server.
RegOpenKey n'a été gardé que pour des raisons de compatibilité avec win-16.
Les nouvelles déclarations sont les suivantes: Declare Function RegOpenKeyEx _ Lib "advapi32.dll" _ Alias "RegOpenKeyExA" _ ( _ ByVal hKey As Long, _ ByVal lpSubKey As String, _ ByVal ulOptions As Long, _ ByVal samDesired As Long, _ phkResult As Long _ ) _ As Long
Enum REG_ACCESSRIGHTS KEY_QUERY_VALUE = (&H1) KEY_SET_VALUE = (&H2) KEY_CREATE_SUB_KEY = (&H4) KEY_ENUMERATE_SUB_KEYS = (&H8) KEY_NOTIFY = (&H10) KEY_CREATE_LINK = (&H20) KEY_WOW64_32KEY = (&H200) KEY_WOW64_64KEY = (&H100) KEY_WOW64_RES = (&H300) KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE)) KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE)) 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)) End Enum
-- François Picalausa (MVP VB) http://faq.vb.free.fr --- http://msdn.microsoft.com http://apisvb.europe.webmatrixhosting.net
"" a écrit dans le message de news:1fc8e01c458ec$b0f949b0$
Bonjour,
Sous WINDOWS 98, j'avais une procédure que l'on m'avait communiquée pour lister les valeurs des clés à l'intérieur d'une clé : Or cela ne fonctionne pas sous XP et je ne comprends pas pourquoi. Peut-être à cause d'un changement dans le type d'une donnée.