Título: Ayuda con RegQueryInfoKey
Publicado por: noob_Setup en 11 Octubre 2005, 23:07 pm
Buenas: 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 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
Título: Re: Ayuda con RegQueryInfoKey
Publicado por: Slasher-K en 13 Octubre 2005, 02:58 am
A mi con RegQueryInfoKey me va bien.
Por cierto, o ese code es una copia o programamos terriblemente parecido.
Saludos.
Título: Re: Ayuda con RegQueryInfoKey
Publicado por: noob_Setup en 13 Octubre 2005, 18:44 pm
Lo suplante con un codigo que saque de la web de el guille. De todas formas comprobe que con w98 corre perfecto pero en xp no. La solucion esta con otras formas de llegar a la key buscando por ParseKey, el code esta disponible en la web del guille
gracias
Título: Re: Ayuda con RegQueryInfoKey
Publicado por: noob_Setup en 13 Octubre 2005, 18:46 pm
ahh me olvidaba, no no es copia tuya saque algunos pedazos de el guille pero hicimos algunas reformas.
saludos
|