N.B. Questo articolo parla del registro di Windows. Prego chi vuole fare esperimenti di prestare massima attenzione e di non osare troppo!Il Registro di WindowsIl registro è un repository centralizzato del sistema operativo Windows. E' una parte fondamentale di tutto il sistema, infatti senza di esso il funzionamento del sistema stesso sarebbe a dir poco difficoltoso se non estremamente complicato.
Ad alcuni di noi è già successo di ritrovarsi il registro corrotto e di dover reinstallare da capo alcune applicazioni se non direttamente tutto il sistema operativo!
Il registro ha una struttura ad albero estremamente organizzata e profonda diversi livelli. E' suddiviso in chiavi primarie, chiavi, sottochiavi e valori.
Per accedervi è necessario lanciare il comando
regedit.exe da Start->Esegui.
Come potete vedere nel registro di Windows ci sono solitamente 5 Macro-chiavi molto importanti che qui elenco:
- HKEY_CLASSES_ROOT
E' un puntatore alla chiave HKEY_LOCAL_MACHINE\Software\Classes e contiene principalmente le associazioni dei file, i programmi predefiniti con cui vengono aperti i file, le registrazioni dei componenti COM/OLE.
- HKEY_CURRENT_USER
Punta ad una chiave di HKEY_USER. Di solito contiene informazioni riguardanti l'utente loggato in quel momento.
- HKEY_LOCAL_MACHINE
Contiene informazioni riguardanti l'hardware e il software presente sul sistema.
- HKEY_USERS
E' composto da varie sotto chiavi (es. S-1-5-18) che corrispondo ad altrettanti utenti presenti nel sistema.
- HKEY_CURRENT_CONFIG
E' un puntatore alla chiave HKEY_LOCAL_MACHINE\Config. Contiene informazioni riguardanti le impostazioni dell'hardware installato.
Oltre a queste, in alcune versioni di Windows, se ne affiancano altre due:
- HKEY_DYN_DATA
Contiene informazioni immagazzinate nella memoria RAM riguardanti l'hardware e le periferiche aggiunte o rimosse dal sistema. (supportato solo in Windows98/ME)
- HKEY_PERFORMANCE_DATA
Contiene dati e informazioni relative alle performance del sistema visibili anche in dettaglio tramite l'utilità PerfMon di Windows.
Qual è il ProductID di Windows?C'è un solo modo per scoprirlo! Utilizzare il registro.
Scorrendo i vari rami del registro ci si può imbattere in informazioni a volte molto comode e comprensibili, a volte invece poco comprensibili e magari neanche documentate, giustamente.
Una molto comoda da reperire è il ProductID di Windows (Attenzione questo non è il codice di installazione di Windows ma il codice del prodotto che appare cliccando dal pannello di controllo sull'icona del Sistema, screenshot qui sotto).
Il ProductID di Windows
Lettura di una chiaveQuesta è la classe che contiene i campi (Fields) corrispondenti alle 7 macro chiavi elencate precedentemente.
Ora vedremo com'è semplice utilizzarla con la RegistryKey per accedere ad una chiave di registro.
Con solo due righe di codice avremo raggiunto il nostro obbiettivo, eccole:
RegistryKey key=Registry.LocalMachine.OpenSubKey "SOFTWARE\\Microsoft\\Windows\\CurrentVersion");
Console.WriteLine(rkey.GetValue("ProductID").ToString());
key.Close();
Come potete vedere, abbiamo definito una chiave chiamata "key".
Con Registry.LocalMachine indichiamo al framework che vogliamo utilizzare la macro chiave HKEY_LOCAL_MACHINE e con il metodo "OpenSubKey" accediamo alla chiave SOFTWARE\Microsoft\Windows\CurrentVersion dov'è immagazzinato il nostro codice, come potete vedere dalla screenshot qui sotto:
Il registro di Windows con la chiave dell'esempio selezionata
La seconda riga di codice quindi va a recupere con il metodo "GetValue" il valore di ProductID lo trasforma in stringa e viene stampato a Console in output.
La terza riga, non meno importante delle altre, chiude la referenza alla chiave. E' necessario sempre chiudere il riferimento per non incorrere in malfunzionamenti eventuali.
Creazione di una chiave e di valoriAllo stesso modo è possibile creare dalla nostra applicazione delle sottochiavi ed eventualmente dei valori. Pensiamo ad esempio di salvare la posizione della finestra in modo da riposizionarla all'apertura seguente nello stesso posto.
Utilizziamo delle coordinate X e Y che salviamo nel registro nella chiave HKEY_LOCAL_MACHINE\Software\dotNetHell.it che verrà creata appositamente.
RegistryKey key=Registry.LocalMachine.CreateSubKey("SOFTWARE\\dotNetHell.it");
key.SetValue("PosizioneX","140");
key.SetValue("PosizioneY","80");
key.Close();
Il risultato è questo:
Le due coordinate appena create
Eliminazione di una chiavePortiamo a termine il nostro lavoro, ripulendo il registro dalle due chiavi appena create.
RegistryKey key=Registry.LocalMachine.CreateSubKey("SOFTWARE");
key.DeleteSubKey("dotNetHell.it");
key.Close();
La seconda istruzione elimina definitivamente la chiave "dotNetHell.it" e contemporaneamente i valori ad essa associati (PosizioneX e PosizioneY).
Per chi volesse avere più controllo della situazione e magari fosse più interessato, presento qui di seguito l'utilizzo del metodo "DeleteValue" che permette di eliminare i valori singolarmente.
RegistryKey key=Registry.LocalMachine.CreateSubKey("SOFTWARE");
key.DeleteValue("PosizioneX");
key.DeleteValue("PosizioneY");
key.Close();
Il codice di questo esempio è disponibile per lo scaricamento sia in linguaggio C# che in VB.NETConclusioniCome vedete il supporto al registro di Windows è molto semplificato e si può interagire con poche istruzioni ed in modo rapido.
Attenzione però a non combinare danni, mi raccomando!