Vai al contenuto
PLC Forum


Api Registro Di Sistema Per Vb6


NRG

Messaggi consigliati

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

Link al commento
Condividi su altri siti


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 Long

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

Long

Private 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 Long

Const 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 strings

Function 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 + 1

Loop

' Close the key, if it was actually opened

If handle Then RegCloseKey handle

End Function

Ciao alla prox B)

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...