NRG Inserito: 28 gennaio 2006 Segnala Inserito: 28 gennaio 2006 Salve, ho un problema nella scrittura del codice di un programma in Visual Basic 6.0.Vorrei sapere se esiste qualche API che mi permette di leggere, nel Registro di Sistema, i nomi delle sottochiavi contenute all'interno di una chiave principale nota.Ad esempio data la chiave principale HKEY_LOCAL_MACHINE la funzione deve restituire la lista delle relative sottochiavi (ad esempio): HARDWARE,SOFTWARE, SYSTEM, ecc.Ho utilizzato ad esempio le API RegOpenKeyEx (apre una chiave nel registro di configurazione) e RegQueryValueEx (legge un valore della chiave dal registro di configurazione), ma ho sempre la necessità di inserire nel codice il nome della chiave da esaminare.Grazie..NRG
jumpier Inserita: 28 gennaio 2006 Segnala Inserita: 28 gennaio 2006 Prova questo: dovrebbe restituirti tutte le sottochiavi del registry rispetto ad una specificata:Private 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 LongPrivate Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As _ LongPrivate Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" _ (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, _ ByVal cbName As Long) As LongConst KEY_READ = &H20019 ' ((READ_CONTROL Or KEY_QUERY_VALUE Or' KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not' SYNCHRONIZE))' Enumerate registry keys under a given key'' returns a collection of stringsFunction EnumRegistryKeys(ByVal hKey As Long, ByVal KeyName As String) As _ Collection Dim handle As Long Dim length As Long Dim index As Long Dim subkeyName As String ' initialize the result collection Set EnumRegistryKeys = New Collection ' Open the key, exit if not found If Len(KeyName) Then If RegOpenKeyEx(hKey, KeyName, 0, KEY_READ, handle) Then Exit Function ' in all case the subsequent functions use hKey hKey = handle End If Do ' this is the max length for a key name length = 260 subkeyName = Space$(length) ' get the N-th key, exit the loop if not found If RegEnumKey(hKey, index, subkeyName, length) Then Exit Do ' add to the result collection subkeyName = Left$(subkeyName, InStr(subkeyName, vbNullChar) - 1) EnumRegistryKeys.Add subkeyName, subkeyName ' prepare to query for next key index = index + 1Loop' Close the key, if it was actually openedIf handle Then RegCloseKey handleEnd FunctionCiao alla prox
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora