Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
In alcuni progetti può essere utile richiamare la finestra standard di Windows per formattare un'unità. In questo HowTo vedremo come fare, sfruttando una funzione API della libreria SHELL32 non documentata.
Questo progetto si compone di un forme di un modulo standard per la definizione delle funzioni e costanti API. Scriviamo all'interno del modulo:
Nella sezione dichiarazioni abbiamo una serie di costanti ed una funzione
API.
Alle righe 9-11 abbiamo dichiarato le modalità di formattazione del drive: SHFMT_OPT_QUICK per la formattazione veloce, SHFMT_OPT_FULL per la formattazione completa e SHFMT_OPT_SYSONLY per il solo trasferimento dei files di sistema. Alle righe 12-14 abbiamo le costanti indicanti i codici di uscita della formattazione: SHFMT_ERROR in caso di errori, SHFMT_CANCEL per annullamento dell'operazione da parte dell'utente e SHFMT_NOFORMAT in caso di impossibilità a formattare l'unità. L'ultima costante è la SHFMT_ID_DEFAULT ed indica il tipo di formattazione da eseguire (riga 15). Alla riga 17, infine, abbiamo la dichiarazione della funzione API SHFormatDrive. Questa funzione non è documentata ufficialmente e risulta impossibile trovarla nei visualizzatori di dichiarazioni API. Essa richiede come parametri l'handle della finestra che richiede l'attivazione della finestra di formattazione, il drive indicato numericamente (vedi sopra), il tipo di formattazione da effettuare e le opzioni di formattazione (vedi sopra).
La nostra funzione di richiamo della finestra di formattazione si chiamerà FormatDriveDlg e richiede due parametri obbligatori ed uno opzionale. Alla riga 20 viene controllato se è stato passato il parametro Options opzionale. Se non dovesse essere stato passato, sarà impostato come opzione di formattazione SHFMT_OPT_QUICK, ovvero la formattazione rapida. Alla riga 21 viene richiamata la funzione ShFormatDrive passandole come parametri quelli ricevuti dalla nostra funzione ed il tipo di formattazione (SHFMT_ID_DEFAULT). Il risultato dell'operazione sarà riportato in uscita alla funzione FormatDriveDlg. Possiamo adesso vedere il form semplicissimo per richiamare la finestra di formattazione per l'unità floppy A: L'interfaccia si compone di un solo CommandButtondi nome btnFormatDrive al cui click verrà eseguito il seguente codice:
L'unica routine è quella legata all'evento
Click sul pulsante btnFormatDrive.
In uscita dalla funzione, il valore ret conterrà un numero
indicante un errore oppure la riuscita operazione. La prova del progetto è molto semplice: la pressione dell'unico pulsante sul form richiama la nostra finestra di formattazione. Qualunque sia stato il risultato dell'operazione, apparirà una finestra informativa. |
In questo nostro esempio abbiamo voluto richiamare la finestra di formattazione per l'unità floppy per limitare al minimo gli accidentali danni. È fondamentale non sottovalutare questo: prima di mostrare la finestra di formattazione di un'unità, avvisare sempre l'utente. Infatti, l'involontaria pressione di un tasto da tastiera può in pochi secondi cancellare preziose informazioni. Si consiglia di non abusare di questa funzione, sebbene possa essere utile in progetti che richiedono l'utilizzo di un dischetto. Roal
Zanazzi
|
Torna all'indice degli HowTo |