Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Segue l'unico metodo pubblico della classe: Register, che consente di registrare nel sistema l'estensione specificata ed associarvi un verbo, completo di descrizione aggiuntiva e del percorso del programma da richiamare.
Alla riga 107 è dichiarata la variabile fbiRegistry che verrà utilizzata per accedere al registro mediante la classe clsFBIRegistry. Alla riga 114 è istanziata la variabile fbiRegistry. L'altra variabile strNewPath sarà utilizzata per determinare la posizione in cui andranno memorizzate le impostazioni. La funzione restituisce un valore booleano corrispondente all'avvenuta registrazione. Durante l'avvio saranno verificati i valori delle proprietà Extension, FileType e del verbo da registrare. In caso di valori nulli sarà generato un errore e la funzione sarà interrotta.
Poiché verrà utilizzata dappertutto l'istanza fbiRegistry si è scelto di attivare il qualificatore immediato con With. La prima operazione da effettuare è quella di aprire (o creare se inesistente) la chiave corrispondente all'estensione da registrare. La riga 118 spezza la funzione in due grosse parti: se la proprietà PreserveSettings è impostata su True allora dovranno essere rilevate le impostazioni attuali e preservate; in caso contrario dovranno essere utilizzate le altre proprietà della classe, senza alcun rispetto dei valori attuali. Nel caso si scelga di preservare le impostazioni attuali, la prima operazione da eseguire sarà quella di capire se attualmente è utilizzato il deferring e tale verifica è fatta alle righe 119-120. Se esiste un valore di deferring sarà ridefinito il valore della proprietà DeferSettings e sarà aperta la chiave puntata dal valore di deferring.
Le cose si complicano se la registazione attuale non utilizza deferring. Ciò infatti può significare che la chiave non esiste oppure esiste ma semplicemente non fa uso di una registrazione reinviata.
Il primo controllo quindi da effettuare consiste nel verificare che esista una sottochiave di nome shell (riga 124). In tal caso sarà ridefinito il valore della proprietà DeferSettings per informare l'utente che le impostazioni attuali non utilizzano deferring e ci si prepara a lavorare con una chiave non rinviata. Nel caso che la sottochiave shell non esista invece il programma dovrà comportarsi secondo le impostazioni delle proprietà DeferSettings e DeferredPath. Alla riga 131 sarà assegnato il valore per la chiave reinviata che sarà creata alla riga 137. Se la proprietà FileType contiene qualche valore e si sta applicando il deferring allora sarà aggiunta anche la descrizione aggiuntiva del tipo di file.
Questa è la parte più complessa del codice. Dopo aver registrato il valore della chiave in cui andranno memorizzati i verbi viene creata la sottochiave shell (riga 141). Se è stato assegnato un valore alla proprietà DefaultVerb questo sarà immediatamente scritto nel valore predefinito della chiave appena creata. Saranno quindi create con una sola riga le due sottochiavi corrispondenti al verbo richiesto nella registrazione (newName) e la corrispondente sottochiave command. Se la chiave esistesse già e ci fosse un valore predefinito l'elaborazione non dovrà procedere ulteriormente per non sovrascrivere i dati preesistenti. Infatti la proprietà PreserveSettings non consente di sovrascrivere verbi esistenti. Saranno quindi in ordine generato l'evento Error, chiusa l'ultima chiave usata, deallocata la variabile fbiRegistry ed interrotta l'esecuzione della funzione (righe 144-147). Se invece la chiave non esistesse sarà semplicemente chiusa la chiave command aperta in precedenza ed aperta la chiave corrispondente al punto di registrazione (estensione o deferring). Dovrà quindi essere registrata l'icona specificata nella proprietà DefaultIcon (righe 151-155). Completate queste premesse ci si potrà preparare alla registrazione del verbo vero e proprio.
Resta da valutare l'intera situazione in cui è stato scelto di
non preservare le impostazioni attuali. Sarà verificato se dalla
proprietà DeferSettings è stato scelto di usare il
deferring: in tal caso sarà applicato immediatamente registrandone
il valore e creando la nuova chiave (righe 159-162). Sarà inoltre
aggiunta la descrizione completa del tipo di file (riga 163).
Se è stata impostata un'icona nella proprietà DefaultIcon essa sarà registrata alle righe 168-173. Lo stesso vale per il verbo di default (riga 175). Al raggiungimento della riga 178 la chiave correntemente aperta punterà esattamente al verbo da registrare (righe 156 e 176).
Segue la fase conclusiva della registrazione: la scrittura della descrizione aggiuntiva al verbo, se esiste nel parametro newFullName. Sarà infine creata la chiave command in cui sarà scritto il percorso del programma da richiamare per il verbo indicato. La routine volge al termine con la chiusura dell'ultima chiave usata,
la deallocazione della variabile
fbiRegistry e l'impostazione del valore di ritorno a True, ad indicare
la corretta registrazione del verbo. |
Nell'esempio allegato è presente anche un progetto che utilizza questa classe con dati dimostrativi ma fondalmente inutili. Saranno utilizzate tutte le proprietà e le due modalità di registrazione dei dati, mediante scrittura sulla chiave dell'estensione e mediante deferring. Si raccomanda di guardare i cambiamenti direttamente sul registro di Windows man mano che vengono chiamate le funzioni Register. Fibia
FBI
|
Torna all'indice degli HowTo |