Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Alcuni programmi che operano con le impostazioni del sistema possono dover presentare all'utente la possibilità di modificare i dati tramite le applet del pannello di controllo, quei piccoli programmi che regolano il comportamento delle impostazioni del computer in uso.
Vedremo in questo semplice HowTo come richiamare tali applet per permettere all'utente la visualizzazione o la modifica dei dati del sistema. Utilizzeremo una soluzione molto semplice, la stessa che utilizza Windows quando l'utente clicca due volte sull'icona di un file del pannello di controllo; questi files avranno estensione CPL. Il nostro progetto si comporrà di un solo e semplice form su cui saranno presenti due Label descrittive, una ComboBox di nome cboApplets con la proprietà Style impostata su 2 - Dropdown List in modo da non consentire l'immissione di dati all'utente. Oltre questa abbiamo una TextBox di nome txtNumeroPagina ed un CommandButton di nome cmdApriApplet. Il funzionamento è davvero semplice: l'utente dovrà semplicemente scegliere l'applet che desidera aprire tramite la ComboBox, inserire opzionalmente il numero di pagina dell'applet e premere il grande pulsante. Per numero di pagina intendiamo la scheda (TabStrip) dell'applet richiamata. Quasi tutte le applet, infatti contengono molte informazioni, suddivise in categorie tra le varie pagine. Mediante l'utilizzo di questo codice potremo non solo specificare quale applet avviare ma anche la pagina corrispondente da mostrare all'utente. La prima operazione da effettuare all'avvio del nostro progetto sarà quella di ricercare tutte le applet, ovvero tutti i files con estensione CPL presenti nella cartella System (se usiamo Windows 9x/ME) o System32 (se usiamo Windows NT). L'operazione di elencazione di tutti i files corrispondenti ad un criterio è trattata in un altro HowTo con la piccolissima differenza che invece di utilizzare una ListBox questo caso utilizza una ComboBox. Vediamo il nostro codice:
Alla riga 3 abbiamo dichiarato la funzione API GetSystemDirectory che recupererà il percorso della cartella System o System32 del computer. Abbiamo detto infatti che tutte le applet conosciute dal pannello di controllo risiedono lì dentro.
Alla riga 4 è dichiarata la funzione API SendMessage che utilizzeremo per recuperare con estrema semplicità tutte le applet contenute nella cartella. Il messaggio che invieremo sarà quello definito alla riga successiva, corrispondente alla costante API CB_DIR.
E così, all'avvio del form viene costruita la stringa che indicherà
il percorso della cartella da cui ritrovare i files CPL. Alla riga 8 definiamo
una costante di nome lngFilesTutti corrispondente alla combinazione
dei vari attributi dei files. Questa sarà utilizzata durante la
ricerca dei files. Alla riga 10 viene allocato
lo spazio necessario ed alla riga successiva viene ritrovata la cartella
System o System32 tramite la funzione API GetSystemDirectory. Completata la costruzione del percorso e del filtro di ricerca richiederemo alla funzione API SendMessage l'autoelencazione di tutti i files CPL specificando innanzitutto l'handle della ComboBox, il messaggio CB_DIR, il tipo di ricerca da effettuare ed il percorso.
L'unico evento da gestire nel nostro progetto riguarda il click sull'unico pulsante cmdApriApplet per richiedere l'apertura dell'applet corrispondente, operazione che effettueremo tramite l'utilizzo dell'utility RUNDLL32. La stringa con cui richiamiamo l'applet proviene dal registro di Windows. Abbiamo infatti detto che lo stesso Windows (più precisamente Explorer) utilizza questa tecnica per richiamare i files CPL.
La stringa si compone del nome dell'utility Rundll32 seguita dalla libreria shell32.dll da cui richiamare la funzione API Control_RunDLL. Tra il nome della libreria e della funzione è richiesta la presenza di una virgola. Tutto quello che seguirà sono i dati da fornire alla funzione API Control_RunDLL e più precisamente il nome, senza necessità del percorso, dell'applet da richiamare; il secondo parametro non è utilizzato mentre il terzo indicherà il numero della pagina da richiamare, specificata nella casella di testo txtNumeroPagina. Un esempio di stringa può essere: |
Un
trucchetto interessante consiste nel non passare il nome dell'applet alla
funzione Control_RunDLL. Verrà allora aperto il pannello di controllo
dal quale l'utente potrà scegliere l'applet che desidera caricare. Il difetto principale di questa soluzione è rappresentato dall'impossibilità di scegliere alcune schede di alcune applet. Questo codice non richiamerà infatti tutte le pagine a disposizione dell'utente ma soltanto una parte di queste. Fibia
FBI
|
Torna all'indice degli HowTo |