Guida al Visual Basic .NET
Capitolo 85° - Manipolare il registro di sistema
Il registro di sistema è un po' il totum continens delle informazioni: navigando fra le sue chiavi e i suoi valori, ci si può
trovare qualunque cosa, ed è infatti uno dei bersagli più agognati dagli spyware. Il sistema operativo lo usa per immagazzinare
qualsiasi dato utile al suo funzionamento, dai programmi associati ai tipi di file, agli assembly installati, alle estensioni del pannello
di controllo, fino ai tempi che l'interfaccia impiega per aggiornarsi. Con un paragone un pò iperbolico, si potrebbe paragonare il registro
di sistema all'insieme delle variabili di Windows stesso. Saperlo modificare opportunamente porta grandi vantaggi alle applicazioni che si scrivono.
Di contro, un'azione azzardata potrebbe causare molti danni. Se non avete una minima conoscenza di come agire in questo contesto, saltate il
capitolo (oppure andate a documentarvi e tornate più tardi), altrimenti, proseguite senza indugio. Microsoft.Win32.RegistryKey
Per iniziare a utilizzare le classi che agiscono sul registro, bisogna prima importare il namespace Microsoft.Win32. Una volta fatto ciò diventa disponibile il tipo RegistryKey, i cui membri permettono di eseguire ogni azione possibile e immaginabile. Una variabile di questo tipo contiene le informazioni relative alla chiave su cui è impostata, e i metodi che aprono altre chiavi si riferiscono solo alle sottochiavi di quella considerata. In virtù di ciò, esistono due modi per aprire una chiave partendo da una root. Il primo consiste nell'utilizzare i campi pubblici già impostati della classe Registry: 'Da notare che il tipo non espone costruttori Dim RegKey As RegistryKey 'Apre la chiave HKEY_CLASSES_ROOT RegKey = Registry.ClassesRoot 'Apre la sottochiave .zip RegKey = RegKey.OpenSubKey(".zip") Il secondo consiste nell'usare la funzione OpenRemoteBaseKey. Dopo aver aperto una chiave, si possono usare i suoi metodi. Eccone un elenco:
Con il codice proposto nel prossimo esempio è possibile risalire all'applicazione usata per aprire un certo formato di file: Imports Microsoft.Win32 Module Module1 Sub Main() Dim RegKey As RegistryKey Dim Extension As String Console.Write("Inserire un'estesione valida: ") Extension = Console.ReadLine() RegKey = Registry.ClassesRoot.OpenSubKey(Extension) If RegKey Is Nothing Then Console.WriteLine("Questa estensione non è associata a nessuna applicazione!") Console.ReadKey() Exit Sub End If Dim AppKey As String = RegKey.GetValue("") RegKey = Registry.ClassesRoot.OpenSubKey(AppKey) If RegKey Is Nothing Then Console.WriteLine("Non ? possibile risalire all'applicazione. Dati mancanti.") Console.ReadKey() Exit Sub End If RegKey = RegKey.OpenSubKey("shellopencommand") If RegKey Is Nothing Then Console.WriteLine("Non ? possibile aprire il file direttamente con un'applicazione.") Console.ReadKey() Exit Sub End If Console.WriteLine("Applicazione usata:") Console.WriteLine(RegKey.GetValue("")) Console.ReadKey() End Sub End Module
C#, TypeScript, java, php, EcmaScript (JavaScript), Spring, Hibernate, React, SASS/LESS, jade, python, scikit, node.js, redux, postgres, keras, kubernetes, docker, hexo, etc...
|