Alguien sabe si esta funcion funciona en win Xp pues en la misma aplicacion corre perfecto sobre 98 pero cuando lo pruebo en xp no me retorna ningun valor
el codigo de la funcion es este
Código:
Public Function EnumKey(lPredefinedKey As Long, sKeyName As String, vSubKeys As Variant) As Long
' Descripción:
' Esta función busca todas las subclaves de una dada y forma una matriz con ellas en
' el parámetro vSubKeys.
'
' Si queremos saber las subclaves de una de las principales debemos dejar en blanco
' el parámetro sKeyName
'
' Devuelve el número de subclaves o -1 si hubo algún error
'
' Sintaxis:
' variable = EnumKey (ClaveRaíz, NombreDeClave,SubClaves)
'
' ClaveRaíz debe ser HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
' o HKEY_USERS
'
' NombreDeClave es el nombre de la clave cuyas subclaves queremos obtener,
' puede incluir subclaves (por ejemplo "Clave1\SubClave1")
'
' SubClaves es un variant que recogerá la matriz de subclaves obtenida
Dim lRetVal As Long 'resultado de las funciones del API
Dim hKey As Long 'handle de la clave abierta
Dim sSubKeyName As String 'nombre de la subclave
Dim lSubKeyLen As Long 'tamaño del nombre de la subclave
Dim lMaxSubKeyLen As Long 'tamaño del nombre de subclave más grande
Dim lNumSubKeys As Long 'número de subclaves existentes
Dim ftLastWriteTime As FILETIME 'fecha última modif. de la clave (sólo NT)
Dim lIndex As Long 'índice de la subclave
Dim sSubClaves() As String 'matriz para contener las subclaves
EnumKey = -1
'si tenemos nombre de clave la abrimos
If sKeyName <> "" Then
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
Else
hKey = lPredefinedKey
End If
'obtenemos el nº de subclaves y el tamaño máximo de sus nombres
lRetVal = RegQueryInfoKeyEx(hKey, 0&, 0&, 0&, lNumSubKeys, lMaxSubKeyLen, 0&, 0&, 0&, 0&, 0&, ftLastWriteTime)
If lRetVal = 0 Then
'si no encontré subclaves
If lNumSubKeys = 0 Then
EnumKey = 0
Else
EnumKey = lNumSubKeys
lNumSubKeys = lNumSubKeys - 1 ' va de 0 a n-1
lMaxSubKeyLen = lMaxSubKeyLen + 1 ' dejar sitio para el 0 de fin de string en c
'dimensionamos la matriz
ReDim sSubClaves(lNumSubKeys)
'recorremos las subclaves (en orden inverso, como dice la ayuda ¿?)
For lIndex = lNumSubKeys To 0 Step -1
lSubKeyLen = lMaxSubKeyLen
sSubKeyName = String(lMaxSubKeyLen, 0)
lRetVal = RegEnumKeyEx(hKey, lIndex, sSubKeyName, lSubKeyLen, 0&, 0&, 0&, ftLastWriteTime)
If lRetVal = 0 Then
sSubClaves(lIndex) = Left$(sSubKeyName, lSubKeyLen)
Else
EnumKey = -1
End If
Next lIndex
End If
Else
EnumKey = -1
End If
'devolvemos el resultado
vSubKeys = sSubClaves()
'cerramos la clave
If sKeyName <> "" Then RegCloseKey (hKey)
End Function
gracias desde ya
' Descripción:
' Esta función busca todas las subclaves de una dada y forma una matriz con ellas en
' el parámetro vSubKeys.
'
' Si queremos saber las subclaves de una de las principales debemos dejar en blanco
' el parámetro sKeyName
'
' Devuelve el número de subclaves o -1 si hubo algún error
'
' Sintaxis:
' variable = EnumKey (ClaveRaíz, NombreDeClave,SubClaves)
'
' ClaveRaíz debe ser HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
' o HKEY_USERS
'
' NombreDeClave es el nombre de la clave cuyas subclaves queremos obtener,
' puede incluir subclaves (por ejemplo "Clave1\SubClave1")
'
' SubClaves es un variant que recogerá la matriz de subclaves obtenida
Dim lRetVal As Long 'resultado de las funciones del API
Dim hKey As Long 'handle de la clave abierta
Dim sSubKeyName As String 'nombre de la subclave
Dim lSubKeyLen As Long 'tamaño del nombre de la subclave
Dim lMaxSubKeyLen As Long 'tamaño del nombre de subclave más grande
Dim lNumSubKeys As Long 'número de subclaves existentes
Dim ftLastWriteTime As FILETIME 'fecha última modif. de la clave (sólo NT)
Dim lIndex As Long 'índice de la subclave
Dim sSubClaves() As String 'matriz para contener las subclaves
EnumKey = -1
'si tenemos nombre de clave la abrimos
If sKeyName <> "" Then
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
Else
hKey = lPredefinedKey
End If
'obtenemos el nº de subclaves y el tamaño máximo de sus nombres
lRetVal = RegQueryInfoKeyEx(hKey, 0&, 0&, 0&, lNumSubKeys, lMaxSubKeyLen, 0&, 0&, 0&, 0&, 0&, ftLastWriteTime)
If lRetVal = 0 Then
'si no encontré subclaves
If lNumSubKeys = 0 Then
EnumKey = 0
Else
EnumKey = lNumSubKeys
lNumSubKeys = lNumSubKeys - 1 ' va de 0 a n-1
lMaxSubKeyLen = lMaxSubKeyLen + 1 ' dejar sitio para el 0 de fin de string en c
'dimensionamos la matriz
ReDim sSubClaves(lNumSubKeys)
'recorremos las subclaves (en orden inverso, como dice la ayuda ¿?)
For lIndex = lNumSubKeys To 0 Step -1
lSubKeyLen = lMaxSubKeyLen
sSubKeyName = String(lMaxSubKeyLen, 0)
lRetVal = RegEnumKeyEx(hKey, lIndex, sSubKeyName, lSubKeyLen, 0&, 0&, 0&, ftLastWriteTime)
If lRetVal = 0 Then
sSubClaves(lIndex) = Left$(sSubKeyName, lSubKeyLen)
Else
EnumKey = -1
End If
Next lIndex
End If
Else
EnumKey = -1
End If
'devolvemos el resultado
vSubKeys = sSubClaves()
'cerramos la clave
If sKeyName <> "" Then RegCloseKey (hKey)
End Function
gracias desde ya