Appunti
Nella chiave root HKEY_CLASSES_ROOT c'è l'elenco di tutte le estensioni contemplate all'interno della macchina. Ogni valore (Predefinito) all'interno di ogni singola chiave-estensione ha un valore che rimanda a un'altra chiave nella stessa cartella root. Quest'ultima chiave è di solito riferita almeno i parte con il nome dell'applicazione che ha il compito di aprire quella determinata estensione.
Sapendo cio', ammettiamo di voler aggiungere una voce al menù contestuale di windows per i file txt in modo che ci permette di inviarli per posta elettronica usando il client che abbiamo appena scritto (immaginiamo! su, forza, non è difficile!). Ammettiamo anche che il percorso su disco fisso del programma in questione sia C:\Programmi\ClientPosta\cp.exe. Ora rechiamoci al recapito .txt in HKEY_CLASSES_ROOT (ho scelto txt come estensione perchè presumo che quasi tutti usino il notepad per aprirla) e analizziamone il contenuto. Il valore (Predefinito) è "txtfile" (potrebbe essere diverso in qualche caso, non vi preoccupate, dipende dai programmi che usate). Ok: adesso apriamo la chiave txtfile: le sue sottochiavi sono DefaultIcon, Shell e ShellEx. Selezioniamo Shell e aggiungiamo a questa una nuova chiave NewMenuOption, quindi impostiamo il valore (Predefinito) della chiave appena creata su "Invia per posta..." (senza virgolette). Creiamo un'altra sottochiave di NewMenuOption chiamata command e ne impostiamo il valore (Predefinito) su "C:\Programmi\ClientPosta\cp.exe" "%1" (virgolette comprese). Questa istruzione dice al computer che quando viene premuta l'opzione "Invia per posta..." deve scrivere su linea di comando il percorso del nostro client (tra virgolette, perch� potrebbero esserci spazi), seguito dal percorso del file txt cliccato (sempre tra virgolette). Per ipostesi il client dovrebbe accettare come unico parametro il percorso del file da inviare.
Ora, questa è la teoria, vediamo la pratica:
Imports Microsoft.Win32
'...
Dim RegKey As RegistryKey
Dim K As String
'...
'Apre HKEY_CLASSES_ROOT\.txt
RegKey = Registry.ClassesRoot.OpenSubKey(".txt")
'Preleva il valore (Predefinito)
'Da codice, bisogna assumere che il suo nome sia "",
'una stringa vuota
'Nell'esempio, K = txtfile
K = RegKey.GetValue("")
'Apre la sottochiave HKEY_CLASSES_ROOT\txtfile
RegKey = Registry.ClassesRoot.OpenSubKey(K, True)
'Se non esiste una sottocartella shell la crea
If RegKey.OpenSubKey("shell") Is Nothing Then
RegKey.CreateSubKey("shell")
End If
'Apre la sottochiave shell
RegKey = RegKey.OpenSubKey("shell", True)
'Crea la sottochiave NewMenuOption
RegKey = RegKey.CreateSubKey("NewMenuOption")
'Imposta il suo (Predefinito) a "Invia per posta..."
RegKey.SetValue("", "Invia per posta...")
'Crea la sottochiave command
RegKey = RegKey.CreateSubKey("command")
'Imposta (Predefinito) sul percorso dell'applicazione seguito da "%1"
RegKey.SetValue("", Chr(34) + Application.ExecutablePath + Chr(34) + " " + Chr(34) + "%1" + Chr(34))
Per saperne di più sulla modifica del registro di sistema da codice, vedere anche il capitolo 56 della guida.
The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.



