Registry Classe

Definizione

Fornisce che rappresentano le chiavi radice nel Registro di sistema Windows e metodi per accedere alle coppie chiave/valore.

public ref class Registry abstract sealed
public ref class Registry sealed
public static class Registry
public sealed class Registry
[System.Runtime.InteropServices.ComVisible(true)]
public static class Registry
type Registry = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type Registry = class
Public Class Registry
Public NotInheritable Class Registry
Ereditarietà
Registry
Attributi

Commenti

La Registry classe fornisce il set di chiavi radice standard disponibili nel Registro di sistema nei computer che eseguono Windows. Il Registro di sistema è una funzionalità di archiviazione per informazioni su applicazioni, utenti e impostazioni di sistema predefinite. Le applicazioni possono usare il Registro di sistema per archiviare informazioni che devono essere mantenute dopo la chiusura dell'applicazione e accedere alle stesse informazioni quando l'applicazione viene ricaricata. Ad esempio, è possibile archiviare le preferenze di colore, le posizioni dello schermo o le dimensioni di una finestra. È possibile controllare questi dati per ogni utente archiviando le informazioni in un percorso diverso nel Registro di sistema.

Le istanze di base o radice RegistryKey esposte dalla Registry classe delineano il meccanismo di archiviazione di base per le sottochiavi e i valori nel Registro di sistema. Tutte le chiavi sono di sola lettura perché il Registro di sistema dipende dalla loro esistenza. Le chiavi esposte da Registry sono:

Key Description
CurrentUser Archivia informazioni sulle preferenze utente.
LocalMachine Archivia le informazioni di configurazione per il computer locale.
ClassesRoot Archivia informazioni sui tipi (e le classi) e sulle relative proprietà.
Users Archivia informazioni sulla configurazione utente predefinita.
PerformanceData Archivia le informazioni sulle prestazioni per i componenti software.
CurrentConfig Archivia informazioni hardware non specifiche dell'utente.
DynData Archivia i dati dinamici.

Dopo aver identificato la chiave radice in cui si desidera archiviare/recuperare informazioni dal Registro di sistema, è possibile usare la RegistryKey classe per aggiungere o rimuovere sottochiavi e modificare i valori per una determinata chiave.

I dispositivi hardware possono inserire automaticamente le informazioni nel Registro di sistema usando l'interfaccia Plug and Play. Il software per l'installazione dei driver di dispositivo può inserire informazioni nel Registro di sistema scrivendo nelle API standard.

Metodi statici per ottenere e impostare valori

La Registry classe contiene staticGetValue anche metodi e SetValue per l'impostazione e il recupero di valori dalle chiavi del Registro di sistema. Questi metodi aprono e chiudono le chiavi del Registro di sistema ogni volta che vengono usate. Pertanto, quando si accede a un numero elevato di valori, non funzionano altrettanto bene come metodi analoghi nella classe RegistryKey.

La RegistryKey classe fornisce anche metodi che consentono di:

  • Impostare la sicurezza del controllo di accesso di Windows per le chiavi del Registro di sistema.
  • Testare il tipo di dati di un valore prima di recuperarlo.
  • Eliminare le chiavi.

Nell'esempio di codice seguente viene illustrato come recuperare le sottochiavi della HKEY_USERS chiave e stamparne i nomi sullo schermo. Utilizzare il OpenSubKey metodo per creare un'istanza della sottochiave specifica di interesse. È quindi possibile usare altre operazioni in RegistryKey per modificare tale chiave.

using namespace System;
using namespace Microsoft::Win32;
void PrintKeys( RegistryKey ^ rkey )
{
   
   // Retrieve all the subkeys for the specified key.
   array<String^>^names = rkey->GetSubKeyNames();
   int icount = 0;
   Console::WriteLine( "Subkeys of {0}", rkey->Name );
   Console::WriteLine( "-----------------------------------------------" );
   
   // Print the contents of the array to the console.
   System::Collections::IEnumerator^ enum0 = names->GetEnumerator();
   while ( enum0->MoveNext() )
   {
      String^ s = safe_cast<String^>(enum0->Current);
      Console::WriteLine( s );
      
      // The following code puts a limit on the number
      // of keys displayed.  Comment it out to print the
      // complete list.
      icount++;
      if ( icount >= 10 )
            break;
   }
}

int main()
{
   
   // Create a RegistryKey, which will access the HKEY_USERS
   // key in the registry of this machine.
   RegistryKey ^ rk = Registry::Users;
   
   // Print out the keys.
   PrintKeys( rk );
}
using System;
using Microsoft.Win32;

class Reg {
    public static void Main() {

        // Create a RegistryKey, which will access the HKEY_USERS
        // key in the registry of this machine.
        RegistryKey rk = Registry.Users;

        // Print out the keys.
        PrintKeys(rk);
    }

    static void PrintKeys(RegistryKey rkey) {

        // Retrieve all the subkeys for the specified key.
        string [] names = rkey.GetSubKeyNames();

        int icount = 0;

        Console.WriteLine("Subkeys of " + rkey.Name);
        Console.WriteLine("-----------------------------------------------");

        // Print the contents of the array to the console.
        foreach (string s in names) {
            Console.WriteLine(s);

            // The following code puts a limit on the number
            // of keys displayed.  Comment it out to print the
            // complete list.
            icount++;
            if (icount >= 10)
                break;
        }
    }
}
Imports Microsoft.Win32

Class Reg

    Public Shared Sub Main()

        ' Create a RegistryKey, which will access the HKEY_USERS
        ' key in the registry of this machine.
        Dim rk As RegistryKey = Registry.Users

        ' Print out the keys.
        PrintKeys(rk)
    End Sub

    Shared Sub PrintKeys(rkey As RegistryKey)

        ' Retrieve all the subkeys for the specified key.
        Dim names As String() = rkey.GetSubKeyNames()

        Dim icount As Integer = 0

        Console.WriteLine("Subkeys of " & rkey.Name)
        Console.WriteLine("-----------------------------------------------")

        ' Print the contents of the array to the console.
        Dim s As String
        For Each s In  names
            Console.WriteLine(s)

            ' The following code puts a limit on the number
            ' of keys displayed.  Comment it out to print the
            ' complete list.
            icount += 1
            If icount >= 10 Then
                Exit For
            End If
        Next s
    End Sub
End Class

L'esempio di codice seguente archivia i valori di diversi tipi di dati in una chiave di esempio, creando la chiave così come avviene, quindi recupera e visualizza i valori. Nell'esempio viene illustrata l'archiviazione e il recupero della coppia nome/valore predefinita (senza nome) e l'uso di defaultValue quando non esiste una coppia nome/valore.

using namespace System;
using namespace Microsoft::Win32;

int main()
{   
    // The name of the key must include a valid root.
    String^ userRoot = "HKEY_CURRENT_USER";
    String^ subKey = "RegistrySetValueExample2";
    String^ keyName = String::Concat(userRoot, "\\", subKey);
    
    // An int value can be stored without specifying the
    // registry data type, but Int64 values will be stored
    // as strings unless you specify the type. Note that
    // the int is stored in the default name/value
    // pair.
    Registry::SetValue(keyName, "", 5280);
    Registry::SetValue(keyName, "TestInt64", 12345678901234, 
        RegistryValueKind::QWord);
    
    // Strings with expandable environment variables are
    // stored as ordinary strings unless you specify the
    // data type.
    Registry::SetValue(keyName, "TestExpand", "My path: %path%");
    Registry::SetValue(keyName, "TestExpand2", "My path: %path%", 
        RegistryValueKind::ExpandString);
    
    // Arrays of strings are stored automatically as 
    // MultiString. Similarly, arrays of Byte are stored
    // automatically as Binary.
    array<String^>^ strings  = {"One", "Two", "Three"};
    Registry::SetValue(keyName, "TestArray", strings);
    
    // Your default value is returned if the name/value pair
    // does not exist.
    String^ noSuch = (String^)Registry::GetValue(keyName, 
        "NoSuchName", 
        "Return this default if NoSuchName does not exist.");
    Console::WriteLine("\r\nNoSuchName: {0}", noSuch);
    
    // Retrieve the int and Int64 values, specifying 
    // numeric default values in case the name/value pairs
    // do not exist. The int value is retrieved from the
    // default (nameless) name/value pair for the key.
    int testInteger = (int)Registry::GetValue(keyName, "", -1);
    Console::WriteLine("(Default): {0}", testInteger);
    long long testInt64 = (long long)Registry::GetValue(keyName, 
        "TestInt64", System::Int64::MinValue);
    Console::WriteLine("TestInt64: {0}", testInt64);
    
    // When retrieving a MultiString value, you can specify
    // an array for the default return value. 
    array<String^>^ testArray = (array<String^>^)Registry::GetValue(
        keyName, "TestArray", 
        gcnew array<String^> {"Default if TestArray does not exist."});
    for (int i = 0; i < testArray->Length; i++)
    {
        Console::WriteLine("TestArray({0}): {1}", i, testArray[i]);
    }
    
    // A string with embedded environment variables is not
    // expanded if it was stored as an ordinary string.
    String^ testExpand = (String^)Registry::GetValue(keyName, 
        "TestExpand", "Default if TestExpand does not exist.");
    Console::WriteLine("TestExpand: {0}", testExpand);
    
    // A string stored as ExpandString is expanded.
    String^ testExpand2 = (String^)Registry::GetValue(keyName, 
        "TestExpand2", "Default if TestExpand2 does not exist.");
    Console::WriteLine(
        "TestExpand2: {0}...", testExpand2->Substring(0, 40));
    Console::WriteLine(
        "\r\nUse the registry editor to examine the key.");
    Console::WriteLine("Press the Enter key to delete the key.");
    Console::ReadLine();
    Registry::CurrentUser->DeleteSubKey(subKey);
}
//
// This code example produces output similar to the following:
//
// NoSuchName: Return this default if NoSuchName does not exist.
// (Default): 5280
// TestInt64: 12345678901234
// TestArray(0): One
// TestArray(1): Two
// TestArray(2): Three
// TestExpand: My path: %path%
// TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
// Use the registry editor to examine the key.
// Press the Enter key to delete the key.
using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // The name of the key must include a valid root.
        const string userRoot = "HKEY_CURRENT_USER";
        const string subkey = "RegistrySetValueExample";
        const string keyName = userRoot + "\\" + subkey;

        // An int value can be stored without specifying the
        // registry data type, but long values will be stored
        // as strings unless you specify the type. Note that
        // the int is stored in the default name/value
        // pair.
        Registry.SetValue(keyName, "", 5280);
        Registry.SetValue(keyName, "TestLong", 12345678901234,
            RegistryValueKind.QWord);

        // Strings with expandable environment variables are
        // stored as ordinary strings unless you specify the
        // data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%");
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%",
            RegistryValueKind.ExpandString);

        // Arrays of strings are stored automatically as
        // MultiString. Similarly, arrays of Byte are stored
        // automatically as Binary.
        string[] strings = {"One", "Two", "Three"};
        Registry.SetValue(keyName, "TestArray", strings);

        // Your default value is returned if the name/value pair
        // does not exist.
        string noSuch = (string) Registry.GetValue(keyName,
            "NoSuchName",
            "Return this default if NoSuchName does not exist.");
        Console.WriteLine("\r\nNoSuchName: {0}", noSuch);

        // Retrieve the int and long values, specifying
        // numeric default values in case the name/value pairs
        // do not exist. The int value is retrieved from the
        // default (nameless) name/value pair for the key.
        int tInteger = (int) Registry.GetValue(keyName, "", -1);
        Console.WriteLine("(Default): {0}", tInteger);
        long tLong = (long) Registry.GetValue(keyName, "TestLong",
            long.MinValue);
        Console.WriteLine("TestLong: {0}", tLong);

        // When retrieving a MultiString value, you can specify
        // an array for the default return value.
        string[] tArray = (string[]) Registry.GetValue(keyName,
            "TestArray",
            new string[] {"Default if TestArray does not exist."});
        for(int i=0; i<tArray.Length; i++)
        {
            Console.WriteLine("TestArray({0}): {1}", i, tArray[i]);
        }

        // A string with embedded environment variables is not
        // expanded if it was stored as an ordinary string.
        string tExpand = (string) Registry.GetValue(keyName,
             "TestExpand",
             "Default if TestExpand does not exist.");
        Console.WriteLine("TestExpand: {0}", tExpand);

        // A string stored as ExpandString is expanded.
        string tExpand2 = (string) Registry.GetValue(keyName,
            "TestExpand2",
            "Default if TestExpand2 does not exist.");
        Console.WriteLine("TestExpand2: {0}...",
            tExpand2.Substring(0, 40));

        Console.WriteLine("\r\nUse the registry editor to examine the key.");
        Console.WriteLine("Press the Enter key to delete the key.");
        Console.ReadLine();
        Registry.CurrentUser.DeleteSubKey(subkey);
    }
}
//
// This code example produces output similar to the following:
//
//NoSuchName: Return this default if NoSuchName does not exist.
//(Default): 5280
//TestLong: 12345678901234
//TestArray(0): One
//TestArray(1): Two
//TestArray(2): Three
//TestExpand: My path: %path%
//TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
//Use the registry editor to examine the key.
//Press the Enter key to delete the key.
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' The name of the key must include a valid root.
        Const userRoot As String = "HKEY_CURRENT_USER"
        Const subkey As String = "RegistrySetValueExample"
        Const keyName As String = userRoot & "\" & subkey

        ' Integer values can be stored without specifying the
        ' registry data type, but Long values will be stored
        ' as strings unless you specify the type. Note that
        ' the integer is stored in the default name/value
        ' pair.
        Registry.SetValue(keyName, "", 5280)
        Registry.SetValue(keyName, "TestLong", 12345678901234, _
            RegistryValueKind.QWord)

        ' Strings with expandable environment variables are
        ' stored as ordinary strings unless you specify the
        ' data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%")
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%", _
            RegistryValueKind.ExpandString)

        ' Arrays of strings are stored automatically as
        ' MultiString. Similarly, arrays of Byte are stored
        ' automatically as Binary.
        Dim strings() As String = {"One", "Two", "Three"}
        Registry.SetValue(keyName, "TestArray", strings)

        ' Your default value is returned if the name/value pair
        ' does not exist.
        Dim noSuch As String = _
            Registry.GetValue(keyName, "NoSuchName", _
            "Return this default if NoSuchName does not exist.")
        Console.WriteLine(vbCrLf & "NoSuchName: {0}", noSuch)

        ' Retrieve the Integer and Long values, specifying
        ' numeric default values in case the name/value pairs
        ' do not exist. The Integer value is retrieved from the
        ' default (nameless) name/value pair for the key.
        Dim tInteger As Integer = _
            Registry.GetValue(keyName, "", -1)
        Console.WriteLine("(Default): {0}", tInteger)
        Dim tLong As Long = Registry.GetValue(keyName, _
             "TestLong", Long.MinValue)
        Console.WriteLine("TestLong: {0}", tLong)

        ' When retrieving a MultiString value, you can specify
        ' an array for the default return value. The value is
        ' declared inline, but could also be declared as:
        ' Dim default() As String = {"Default value."}
        '
        Dim tArray() As String = _
            Registry.GetValue(keyName, "TestArray", _
            New String() {"Default if TestArray does not exist."})
        For i As Integer = 0 To tArray.Length - 1
            Console.WriteLine("TestArray({0}): {1}", i, tArray(i))
        Next

        ' A string with embedded environment variables is not
        ' expanded if it was stored as an ordinary string.
        Dim tExpand As String = Registry.GetValue(keyName, _
             "TestExpand", "Default if TestExpand does not exist.")
        Console.WriteLine("TestExpand: {0}", tExpand)

        ' A string stored as ExpandString is expanded.
        Dim tExpand2 As String = Registry.GetValue(keyName, _
             "TestExpand2", "Default if TestExpand2 does not exist.")
        Console.WriteLine("TestExpand2: {0}...", _
            tExpand2.Substring(0, 40))

        Console.WriteLine(vbCrLf & _
            "Use the registry editor to examine the key.")
        Console.WriteLine("Press the Enter key to delete the key.")
        Console.ReadLine()
        Registry.CurrentUser.DeleteSubKey(subkey)
    End Sub
End Class
'
' This code example produces output similar to the following:
'
'NoSuchName: Return this default if NoSuchName does not exist.
'(Default): 5280
'TestLong: 12345678901234
'TestArray(0): One
'TestArray(1): Two
'TestArray(2): Three
'TestExpand: My path: %path%
'TestExpand2: My path: D:\Program Files\Microsoft.NET\...
'
'Use the registry editor to examine the key.
'Press the Enter key to delete the key.

Campi

Nome Descrizione
ClassesRoot

Definisce i tipi (o le classi) dei documenti e le proprietà associate a tali tipi. Questo campo legge la chiave di base del Registro di sistema Windows HKEY_CLASSES_ROOT.

CurrentConfig

Contiene informazioni di configurazione relative all'hardware non specifico dell'utente. Questo campo legge la chiave di base del Registro di sistema Windows HKEY_CURRENT_CONFIG.

CurrentUser

Contiene informazioni sulle preferenze utente correnti. Questo campo legge la chiave di base del Registro di sistema Windows HKEY_CURRENT_USER.

DynData
Obsoleti.

Contiene dati dinamici del Registro di sistema. Questo campo legge la chiave di base del Registro di sistema Windows HKEY_DYN_DATA.

LocalMachine

Contiene i dati di configurazione per il computer locale. Questo campo legge la chiave di base del Registro di sistema Windows HKEY_LOCAL_MACHINE.

PerformanceData

Contiene informazioni sulle prestazioni per i componenti software. Questo campo legge la chiave di base del Registro di sistema Windows HKEY_PERFORMANCE_DATA.

Users

Contiene informazioni sulla configurazione utente predefinita. Questo campo legge la chiave di base del Registro di sistema Windows HKEY_USERS.

Metodi

Nome Descrizione
GetValue(String, String, Object)

Recupera il valore associato al nome specificato, nella chiave del Registro di sistema specificata. Se il nome non viene trovato nella chiave specificata, restituisce un valore predefinito specificato o null se la chiave specificata non esiste.

SetValue(String, String, Object, RegistryValueKind)

Imposta la coppia nome/valore sulla chiave del Registro di sistema specificata utilizzando il tipo di dati del Registro di sistema specificato. Se la chiave specificata non esiste, viene creata.

SetValue(String, String, Object)

Imposta la coppia nome/valore specificata nella chiave del Registro di sistema specificata. Se la chiave specificata non esiste, viene creata.

Si applica a

Vedi anche