Newsgroup: it.comp.lang.visual-basic
Titolo: Problema Registro di configurazione!

Ciao a tutti,
                volevo sapere se qualcuno mi può aiutare dicendomi come
posso leggere o scrivere nel registro di configurazione !
                                                                CIAO
-------------------------------------------------------------
Indirizzo e-mail casa:   
spaw...@inwind.it
oppure                       
spaw...@hotmail.com
ICQ#  51046516
indirizzo e-mail ufficio:  
f.da...@dst.it
-------------------------------------------------------------

Sul sito comune
http://www.murialdo.it/it_lang_vb
ci sono esempi.
Fabio Pagano
Spawn ha scritto nel messaggio ...


Lo puoi fare usando le Api.
Trovi un esempio scaricando dal sito 
www.programmazione.it
 la libreria
Pzeu.zip, nella sezione download di Visual Basic.
Contiene una serie di moduli e classi da usare nei tuoi progetti e c'č anche
una classe CRegistry che puņ servirti.
Ciao.
Flavio Polesello
Pzeu su #programmazione
pz...@libero.it

 wrote


dalle faq di questo newsgroup:
----------------------------------------------------
NOMEFAQ
Modificare il Registro di Windows
TESTODOMANDA
Come posso modificare il registry di Windows 95?
RISPOSTADOMANDA
Risponde: "Corrado Cavalli"
Come utilizzare il Registry nelle applicazioni VB
Cosa è il Registry
Se state sviluppando un'applicazione VB e dovete memorizzare alcune
informazioni relative ad esempio la configurazione del vostro programma, in
Win.3.1 era di norma creare un file d' impostazioni (.ini) e memorizzarvici
le informazioni desiderate mediante le 'mitiche' API
WritePrivateProfileString e GetPrivateProfileString.
Sebbene questo sia possibile anche in Win95/NT,Microsoft consiglia di
scrivere queste informazioni nel 'Database' presente in Windows denominato
Registry.
Fisicamente il Registry si presenta come due files (nascosti) User.Dat e
System.Dat memorizzati nella cartella Windows.
All'interno potete trovare numerose informazioni relative alla
configurazione di Windows e agli applicativi installati.
Potete accedere al Registry utilizzando l'utilità RegEdit.Exe presente nella
cartella Windows.
L'utilizzo del Registry oltre che far sparire tutti i vari files .ini
presenti sull'hard-disk si è reso necessario anche per il fatto che la
tecnologia ActiveX richiede che molte informazioni (CLSIDS,TypeLibs...)
siano disponibili in qualsiasi momento dalle varie applicazioni,da qui la
nascita del Registry.
A dire il vero il Registry esisteva anche in Win31 ma il suo utilizzo era
limitato all'associazione delle varie estensioni dei files con le relative
applicazioni.
Il Registry ha lo svantaggio di non essere così facile da editare come i
files .ini (non tutti gli utenti sanno usare Regedit) perciò tenete conto di
questo fatto quando deciderete dove memorizzare le informazioni relative al
vostro applicativo.
Se data un occhiata con Regedit,noterete che la struttura del Registry è
molto simile a quella di un hard-disk con la differenza che le varie
cartelle vengono chiamate Keys e che i vari files vengono chiamati Items, a
differenza di un hard-disk inoltre il Registry a cinque root directories o
per meglio dire Top-Level Keys.
Queste Top- Keys sono fisse e rapprentano le varie aree in cui il Registry è
suddiviso:
HKEY_CLASSES_ROOT
Contiene informazioni relative agli oggetti (ActiveX) e alle varie clasi
registrate nel sistema oltre che alle varie associazioni tra estensione e
relativa applicazione.
HKEY_CURRENT_USER
Contiene informazioni per accedere alle informazioni relative
all'attuale utente Windows.
HKEY_LOCAL_MACHINE
Contiene informazioni relative alla configurazione hardware e software del
sistema.
HKEY_ USERS
Contiene informazioni relative ai vari utenti al sistema.
HKEY_ CURRENT_CONFIG
Contiene informazioni relative alla configurazione del sistema (Win95 only)
HKEY_ DYN_DATA
Contiene informazioni temporanee che non vengono salvati quando si esce da
Windows (Win95 only)
Per accedere (r/w) al Registry potete utilizzare le funzioni GetSetting,
SaveSetting,DeleteAllSettings che VB mette a disposizione oppure le API di
Windows.
Le funzioni VB hanno il vantaggio d' essere molto semplici da usare, però
non vi danno libero accesso a tutto il Registry ma vi costringono a salvare
e leggere le informazioni dalla chiave HKEY_CURRENT_USER\Software\VB and VBA
Program Settings.
Con le API potete leggere e scrivere in qualsiasi punto del Registry.
Utilizzo delle API relative al Registry
Vi consiglio di 'wrappare' le api relative al Registry in una classe in modo
da poterle facilmente riutilizzare all'interno d' ogni vostra applicazione.
Prima di tutto decidete sotto quale Top-Level Key volete Leggere/Scrivere.
Questa decisione è legata principalmente al tipo di informazioni che volete
leggere o salvare,come indicazione generale utilizzate
HKEY_CURRENT_USER\Software.
Per creare una nuova chiave utilizzate la funzione RegCreateKey.
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias
"RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As
Long) As Long
Hkey
Indice della top level key sotto la quale volete creare la vostra sub-Key ,i
valori accettati sono:
HKEY_CLASSES_ROOT =&H80000000
HKEY_CURRENT_CONFIG = &H80000005
HKEY_CURRENT_USER = &H80000001
HKEY_DYN_DATA = &H80000006
HKEY_LOCAL_MACHINE = &H80000002
HKEY_PERFORMANCE_DATA = &H80000004
HKEY_USERS = &H80000003
LpSubKey
Il nome della sub-key che volte creare
PhkResult
Puntatore (settato da windows) alla sub-key appena creata
Se la sub-key esiste già la chiave verrà aperta anziché creata.
Per poter scrivere all'interno di una chiave bisogna innanzitutto ottenere
un puntatore alla chiave desiderata per ottenerlo utilizzate RegOpenKeyEx.
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
Hkey
Indice relativo alla top-level key utilizzata(vedere RegCreateKey )
LpSubKey
Il nome della sub-key che volte creare
UlOptions
Impostare a 0
SamDesired
Parametro che indica come si vuole utilizzare la chiave per un utilizzo
generico utilizzare KEY_ALL_ACCESS = 131135 (tutte le operazioni
disponibili)
PhkResult
Variabile che al ritorno della funzione conterrà il puntatore alla chiave.
Una volta ottenuto il puntatore alla chiave è possibile scrivervici dei
valori all'interno utilizzando RegSetValueEx.
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long)
As Long
Hkey
Puntatore alla chiave desiderata (se utilizzate RegOpenKeyEx equivale a
phkResult)
lpValueName
Nome dell'elemento da scrivere
Reserved
Impostare a 0
DwType
Tipo di dato che si desidera scrivere può assumere vari valori (Cercate
nelle costanti API per REG_...) i più interessanti sono:
REG_NONE = 0
REG_SZ = 1
REG_DWORD = 4
LpData
Puntatore ai dati da scrivere
CbData
Lungheza (in byte) dei dati da scrivere
Vi consiglio di sfruttare il type checking di VB sostituendo il parametro
lpData as any con,ad esempio,byval sData as string nel caso sia vostro
interesse lavorare con dati in formato stringa.
Dopo avere scritto i dati interessati chiudete sempre la chiave che state
utilizzando con RegCloseKey. (Questo assicura anche il flushing dei dati)
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long)
As Long
Hkey
Puntatore all chiave desiderata (se utilizzate RegOpenKeyEx equivale a
phkResult)
Per recuperare i dati scritti in una chiave utilizzate RegQueryValueEx.
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As
Long) As Long
Hkey
Puntatore alla chiave desiderata (se utilizzate RegOpenKeyEx equivale a
phkResult)
LpValueName
Nome dell'elemento da leggere (vbNullString legge l'item default)
Reserved
Impostare a 0
LpType
Variabile che verrà impostata dalla funzione al tipo di dato letto (es
REG_SZ,REG_DWORD...)
LpData
Buffer che verrà riempito dalla funzione con i dati letti
CbData
Lungheza (in byte) dei dati letti dalla funzione
Attenzione! Win95 include in coda ai dati un Null, WindowsNT no
Per cancellare un item all'interno di una chiave utilizzate RegDeleteValue.
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias
"RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Hkey
Puntatore all chiave desiderata (se utilizzate RegOpenKeyEx equivale a
phkResult)
lpValueName
Nome dell'elemento da cancellare.
Per cancellare una chiave e le relative sottochiavi RegDeleteKey.
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias
"RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Hkey
Puntatore all chiave desiderata (se utilizzate RegOpenKeyEx equivale a
phkResult)
lpSubKey
Nome della chiave da cancellare.
ATTENZIONE CHE TUTTE LE EVENTUALI SOTTOCHIAVI VERRANNO CANCELLATE!
Queste non sono che una minima parte delle API legate al Registry,sono però
le più utilizzate.Vi rimando a MSDN per l'elenco e l'utilizzo delle altre
API.
Tutte le API ritornano 0 (ERROR_SUCCESS) se l'operazione è stata eseguita
correttamente,ogni altro valore indica un errore.
Un esempio interessante...
Supponete di avere sviluppato un'applicazione che crea dei files con
estensione .ART e che vogliate associare i vostri files con la vostra
applicazione in modo automatico,come fare ?
Dovete creare una chiave denominata .ART\Shell\Open\Command sotto
HKEY_CLASSES_ROOT e nel valore di default scrivere il path completo del
vostro applicativo con in coda un parametro sostituibile che verrà passato
al vostro applicativo nel parametro Command$.
SUB Main()
Dim hKey As Long, lErrorCode As Long, sApp As String
lErrorCode = RegCreateKey(HKEY_CLASSES_ROOT, ".ART\Shell\Open\Command",
hKey)
If lErrorCode = ERROR_SUCCESS Then
sApp = "C:\ARP\MyApp.Exe %1"
lErrorCode = RegSetValueEx(hKey, vbNullString, 0, REG_SZ, ByVal sApp,
Len(sApp))
End If
lErrorCode = RegCloseKey(hKey)
END SUB
Notate che con puro codice VB questo non sarebbe stato possibile.
Concludendo
L'utilizzo del Registry è molto più semplice di come appare da queste
righe,bisogna solamente smanettare un po',tenete aperto RegEdit e testate le
API non dimenticatevi di aggiornare (F5) la finestra di RegEdit quando ci
scrivete o leggete.