Il
componente Window Script Host ha lo scopo di ottimizzare alcune
operazioni ripetitive e di una certa complessità. Ad
esempio, nella fase di accesso al registro in lettura/scrittura
si dovrebbe fare uso delle funzioni RegOpenKey e RegCreateKey
per le applicazioni a 16bit e le funzioni estese RegOpenKeyEx
e RegCreateKeyEx per quelle a 32 bit.
La ripetitività nell'uso di tali funzioni sta nell'impossibilità
di chiudere una chiave nel caso in cui se ne debba aprire
o creare una sotto-chiave, creando così una serie di
istruzioni legate le une dalle altre da un parametro che viene
recuperato dalla precedente ed utilizzato nella successiva.
Per
sfruttare le potenzialità dell'oggetto in questione
sarà sufficiente importare nel progetto il riferimento
Window Script Host Object Model, come mostrato in figura:
Il
componente WSH comprende differenti oggetti in base al differente
utilizzo.
Ad esempio l'oggetto WshNetwork può essere utilizzato
per verificare il nome del computer sul quale gira l'applicazione,
il nome dell'utente ed informazioni a queste correlate. L'oggetto
WshShortCut può essere utilizzato per la creazione
di collegamenti al desktop e così via.
Tra tutti si andrà a scegliere l'oggetto WshShell che
ha la funzione (tra le tante altre) di fornire un rapido e
semplice accesso al registro mediante l'impiego di un solo
metodo e quindi di una sola riga di codice.
Nelle dichiarazioni generali si dovrà allora prevedere
una variabile oggetto del tipo WshShell. A tale scopo si può
denominare tale variabile con un nome significativo come ad
esempio oggShell:
In
una sottoprocedura dell'applicazione in sviluppo si dovrà
assegnare un'istanza di WSH alla variabile. Si consideri la
routine Form_Load() come mostrato di seguito:
Private
Sub
Form_Load()
Set oggShell = New
WshShell
'...
End Sub |
Prima
della chiusura della routine si può infine prevedere
l'annullamento dell'istanza dell'oggetto WshShell attraverso
la seguente linea di codice:
In
questo modo le risorse utilizzate per memorizzare l'oggetto
verranno liberate e rese disponibili per altri scopi.
L'interazione dell'oggetto con il registro avviene con l'utilizzo
di tre metodi che saranno ora analizzati uno per uno.
Il metodo RegRead ha lo scopo di leggere una chiave
o un valore. La sintassi corrisponde alla seguente:
oggShell.RegRead(chiave/valore) |
dove
chiave/valore è una stringa che indica la chiave
o il valore da leggere.
Nel caso di una chiave si potrebbe scrivere:
Valore
= oggShell.RegRead("HKEY_CLASSES_ROOT\")
MsgBox Valore |
nel
caso di un valore invece:
Valore
= oggShell.RegRead("HKEY_CURRENT_USER\Keyboard Layout\Preload\1")
MsgBox Valore |
Come
indicare che si desidera leggere una chiave o un valore? Confrontando
i due esempi sopra si noterà che mentre la prima stringa
che identifica una chiave è seguita dal simbolo "\"
("HKEY_CLASSES_ROOT\"), per la seconda non vale
la stessa regola in quanto il testo seguente l'ultima barra
("
\1") non è una chiave ma un valore.
Cosa
indicano le stringhe HKEY_CLASSES_ROOT e HKEY_CURRENT_USER?
Si riferiscono alle finestre del registro di sistema. Ciascuna
finestra corrisponde ad una chiave predefinita, una specie
di macro-chiave i cui valori corrispondono alle sotto-chiavi
rappresentate dalle cartelle. Ad esempio la chiave predefinita
HKEY_CURRENT_USER contiene la directory principale
delle informazioni di configurazione relative all'utente correntemente
connesso. In questa finestra vengono memorizzate le cartelle
dell'utente, i colori dello schermo e le impostazioni del
Pannello di controllo. L'insieme di queste informazioni costituisce
il profilo dell'utente.
La chiave predefinita HKEY_USERS contiene la directory
principale di tutti i profili utente del computer. HKEY_CURRENT_USER
costituisce una sottochiave di HKEY_USERS.
La chiave predefinita HKEY_LOCAL_MACHINE contiene le
informazioni di configurazione specifiche del computer per
tutti gli utenti.
La chiave predefinita HKEY_CLASSES_ROOT è una
sottochiave di HKEY_LOCAL_MACHINE\Software. Le informazioni
memorizzate in questa cartella assicurano l'apertura del programma
corretto quando si apre un file utilizzando Esplora risorse.
E per finire la chiave predefinita HKEY_CURRENT_CONFIG
contiene informazioni sul profilo hardware utilizzato
dal computer locale all'avvio del sistema.
Nella
notazione precedente, invece di utilizzare la definizione
standard della chiave predefinita, è possibile utilizzare,
se consentito, un'abbreviazione apposita, proprio come mostrato
nella tabella:
Collections
|
Significato
|
HKEY_CURRENT_USER
|
HKCU |
HKEY_LOCAL_MACHINE
|
HKLM
|
HKEY_CLASSES_ROOT
|
HKCR
|
HKEY_USERS
|
nessuno |
HKEY_CURRENT_CONFIG
|
nessuno |
NOTA:
nei test di lettura/scrittura nel registro è consigliabile
prima di tutto salvare i valori eventualmente modificati e
tenere una lista delle modifiche in modo da evitare di lasciare
chiavi e valori non utilizzati. Per quanto riguarda invece
le prestazioni è consigliabile utilizzare le chiavi
predefinite che contino un numero inferiore di sotto-chiavi.
Se infatti si utilizza la chiave primaria HKEY_CLASSES_ROOT
prima di visualizzare una modifica effettuata si dovrà
attendere a lungo prima che l'Editor del Registro aggiorni
la lista di sotto-chiavi.
Il
secondo metodo dell'oggetto è RegWrite che ha
lo scopo di scrivere nel registro un valore o una chiave.
Per indicare che si vuole inserire una chiave o un valore
vale la stessa regola analizzata poco prima: una chiave terminerà
col simbolo "\" mentre un valore no.
La sintassi del metodo corrisponde a:
WshShell.RegWrite
stringa, valore, [tipo] |
Dove
stringa indica la chiave da aggiungere, valore l'eventuale
valore associato alla chiave e tipo la tipologia di valore.
Per il tipo di valore la scelta è limitata a: "REG_SZ"
o "REG_EXPAND_SZ" (stringa espandibile) o ancora
"REG_MULTI_SZ" (stringa multipla) , per un valore
in forma di stringa, "REG_DWORD per un intero e "REG_BINARY"
per un valore binario.
La stessa distinzione si ottiene tentando di aggiungere manualmente
un valore al registro. Se infatti si sceglie dal menu dell'Editor
del Registro la voce 'Aggiungi valore' le scelte saranno le
stesse elencate in precedenza, come mostra la figura sottostante:
Pertanto
per aggiungere la chiave denominata "NuovaChiave"
alla chiave predefinita e HKEY_CURRENT_USER:
oggShell.RegWrite
"HKCU\NuovaChiave\", "", "REG_SZ" |
Questo
scriverà la chiave NuovaChiave con un valore nullo
di tipo stringa. Da adesso in poi si utilizzerà la
costante HKCU al posto della notazione estesa HKEY_CURRENT_USER.
Il risultato dell'operazione eseguita sarà simile a
quello ottenuto nella figura seguente:
Se
invece si vuole aggiungere una valore ad una chiave specifica:
oggShell.RegWrite
"HKCU\NuovaChiave\NuovoValore", "Valore",
"REG_SZ" |
Ed
il risultato sarà:
Infine
il terzo metodo è RegDelete che ha il compito
di eliminare chiavi e/o valori utilizzando la stessa regola
analizzata nel caso di RegWrite e RegRead.
La sintassi è:
oggShell.RegDelete
chiave/valore |
Ad
esempio se si vuole eliminare le modifiche al registro apportate
finora, cominciando proprio dal valore NuovoValore:
oggShell.RegDelete
"HKCU\NuovaChiave\NuovoValore" |
ed
il registro ritornerà nella condizione precedente all'inserimento
del valore NuovoValore ossia:
Per
eliminare anche la chiave NuovaChiave:
oggShell.RegDelete
"HKCU\NuovaChiave\" |
|