adszone.org
venerdì 20 settembre 2024
"Il modo corretto di pensare il software"
home
consulenza  vb.net  contatti 
  Visual Basic .NET
  Registry
Domande

Leggere e scrivere nel Windows Registry

Il Registry di windows e' un database di sistema, organizzato secondo una struttura gerarchica. Al suo interno raggruppa diversi tipi di informazioni, che possono essere suddivisi cosi':

  • HKEY_LOCAL_MACHINE - Continene informazioni sulla configurazione di windows, relative alla macchina dove e' installato.
  • HKEY_CURRENT_CONFIG - Continene informazioni sulla configurazione del hardware che non riguardano l'utenza.
  • HKEY_USERS - Contiene informazioni sulle preferenze di default delle utenze.
  • HKEY_CURRENT_USER - Raccoglie informazioni sull'utente che sta usando il sistema.
  • HKEY_CLASSES_ROOT - Definisce i tipi di documenti e le proprieta' associate ad essi.
  • HKEY_DYN_DATA - Contiene dati dinamici per la gestione del sistema come ad esempio i dati usati dai driver virtuali.
  • HKEY_PERFORMANCE_DATA - Raccoglie dati sulle prestazioni, forniti dai componenti software.

Attenzione!! Un uso incorretto del Registry puo' causare seri problemi al sistema e richiedere la reinstallazione dello stesso. Usate le informazioni riportate di seguito con cautela e a vostro rischio.

Alle sette categorie di informazioni riportate precedentemente, vengono associate delle Key (chiavi) con le quali possiamo accedervi. Ogni gruppo contiene dei sottogruppi, detti SubKey, che, a loro volta, possono contenere altre SubKey. Una SubKey ospita uno o piu' valori che costituiscono le informazioni vere e proprie che si vogliono memorizzare. I valori sono indentificati da un Nome, un Tipo di dato ed il valore.

E' pratica comune, da parte delle applicazioni, di usare il Registry per memorizzare dati di configurazione. Presentiamo un esempio che mostra come usare le classi Registry e RegistryKey per salvare e caricare alcune impostazioni di un'applicazione.

La classe Registry fornisce sette campi pubblici di tipo RegistryKey, uno per ciascuna categoria di informazioni.

  • Registry.LocalMachine - individua: HKEY_LOCAL_MACHINE
  • Registry.CurrentConfig - individua: HKEY_CURRENT_CONFIG
  • Registry.Users - individua: HKEY_USERS
  • Registry.CurrentUser - individua: HKEY_CURRENT_USER
  • Registry.ClassesRoot - individua: HKEY_CLASSES_ROOT
  • Registry.DynData - individua: HKEY_DYN_DATA
  • Registry.PerformanceData - individua: HKEY_PERFORMANCE_DATA

La classe RegistryKey ci permette di accedere alle varie SubKey e relativi valori. Con essa possiamo creare nuove chiavi, aggiungere, cancellare valori, etc.

L'esempio mostra un Form che contiene una sola TextBox chiamata txtMessaggio. Ogni volta che il form e' lanciato, carica le impostazioni memorizzate nella precedente esecuzione, in modo da posizionarsi nello stesso punto dello schermo in cui e' stato chiuso, esibendo le medesime dimensioni, mostrando l'ultimo messaggio scritto nella TextBox.

Imports Microsoft.Win32

In genere, se vogliamo personalizzare le applicazioni in base all'utente, memorizziamo le informazioni relative alle impostazioni nella seguente chiave: HKEY_CURRENT_USER\Software\. Per la nostra applicazione, ci riserveremo una sottochiave chiamata Registry_Example, cosicche' il percorso completo sara' HKEY_CURRENT_USER\Software\Registry_Example. Quando vogliamo accedere ad una chiave dobbiamo ottenere un oggetto RegistryKey. Lo otteniamo con il metodo OpenSubKey. In SalvaImpostazioni, OpenSubKey ci serve a testare se l'entry Registry_Example e' gia' esiste, se non esiste la funzione ci restituira' Nothing e noi creeremo la chiave con CreateSubKey. Successivamente, con il metodo SetValue, salveremo, nella chiave, i valori delle proprieta' che desideriamo. La coppia di parametri indica il Nome del valore ed il valore da attribuirgli. Terminata di usare, la chiave regKey va chiusa con Close.

    Private Sub SalvaImpostazioni()
        Dim regKey As RegistryKey

        regKey = Registry.CurrentUser.OpenSubKey( _
               "Software\Registry_Example", True)

        If IsNothing(regKey) Then
            regKey = Registry.CurrentUser.CreateSubKey( _
               "Software\Registry_Example")
        End If

        regKey.SetValue("Messaggio", txtMessaggio.Text)
        regKey.SetValue("X", Me.Left)
        regKey.SetValue("Y", Me.Top)
        regKey.SetValue("Larghezza", Me.Width)
        regKey.SetValue("Altezza", Me.Height)

        regKey.Close()
    End Sub

Quando vogliamo recuperare le impostazioni dal registro, riotteniamo l'oggetto RegistrKey (regKey) con OpenSubKey e quindi invochiamo su di lui il metodo GetValue fornendogli il Nome del valore da recuperare. Se il valore non dovesse esistere ci verrebbe restituito Nothing. Poiche' l'oggetto restituito (obj) e' generico, dovremo convertirlo al suo tipo specifico con CType .

    Private Sub CaricaImpostazioni()
        Dim regKey As RegistryKey
        Dim obj As Object

        regKey = Registry.CurrentUser.OpenSubKey( _
                "Software\Registry_Example")
        If regKey Is Nothing Then Exit Sub

        obj = regKey.GetValue("Messaggio")
        If Not obj Is Nothing Then
            txtMessaggio.Text = CType(obj, String)
        End If

        obj = regKey.GetValue("X")
        If Not obj Is Nothing Then
            Me.Left = CType(obj, Integer)
        End If

        obj = regKey.GetValue("Y")
        If Not obj Is Nothing Then
            Me.Top = CType(obj, Integer)
        End If

        obj = regKey.GetValue("Larghezza")
        If Not obj Is Nothing Then
            Me.Width = CType(obj, Integer)
        End If

        obj = regKey.GetValue("Altezza")
        If Not obj Is Nothing Then
            Me.Height = CType(obj, Integer)
        End If

        regKey.Close()
    End Sub

Carichiamo le informazioni prima che il form venga visualizzato (Form_Load) e le salviamo durante la chiusura (Form_Closing)

    Private Sub Form1_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
        CaricaImpostazioni()
    End Sub

    Private Sub Form1_Closing(ByVal sender As Object, _
            ByVal e As System.ComponentModel.CancelEventArgs) _
            Handles MyBase.Closing
        SalvaImpostazioni()
    End Sub
Ultimo aggiornamento 13/01/2004