Una delle novità più interessanti di Visual Basic 2005 è il namespace My, introdotto per fornire un accesso rapido a classi importanti del framework. Vediamo brevemente di cosa si tratta:

1) My.Application rende disponibili informazioni sull'applicazione Windows Form o Console, il persorso da dove è stata lanciata, le informazioni assembly come le CultureInfo e la versione, la modalità di autenticazione dell'utente e i permessi
2) My.Computer (l'oggetto più ricco del namespace My) permette di interagire con le periferiche quali mouse, tastiera, stampanti, porte seriali, con la memoria e il file system ed infine, con i file audio e la clipboard (appunti).
3) My.User permette di ottenere informazioni sull'identità dell'utente attualmente autenticato.
4) My.Forms fornisce le proprietà per l'accesso all'istanza di ogni forms di Windows dichiarata nel progetto corrente.
5) My.Settings fornisce proprietà e metodi per accedere al file di configurazione dell'applicazione (app.config). Ogni proprietà corrisponde ad un'impostazione definita nei Settings del progetto e viene supportata dinamicamente con l'intellisense di Visual Studio.
6) My.Resources contiene gli oggetti (icone, immagini, stringhe, file di testo) che fanno parte del progetto. Permette inoltre di effettuare operazioni su queste risorse che altrimenti verrebbero fornite come file esterni.
7) My.WebServices consente di usare i servizi web / metodi web.

Vediamo ora qualche esempio:

My.Application espone l'oggetto Log i cui metodi permettono di interagire con il file di log dell'applicazione, riportando i messaggi di errore riscontrati a run-time.
Per scrivere qualcosa nel file di log basta fare così:

                        
My.Application.Log.WriteEntry("Messaggio/Errore...")               

oppure My.Application.Log.WriteEntry("Messaggio/Errore...",TraceEventType.Information)

Per fare questo però, bisogna agire anche sul file app.config.

                        
<sources>
    <!-- Questa sezione definisce la configurazione di registrazione per My.Application.Log -->
    <source name="DefaultSource" switchName="DefaultSwitch">
        <listeners>
            <add name="FileLog"/>
            <!-- Per scrivere nel log eventi dell'applicazione, rimuovere il commento dalla sezione sottostante -->
            <!--<add name="EventLog"/>-->
        </listeners>
    </source>
</sources>               
                    

Altre proprietà, metodi ed eventi interessanti di My.Application sono
- CommandLineArgs contenente gli argomenti della linea di comando
- OpenForms contenente la collection dei forms aperti
- GetEnvironmentVariable(nome_variabile) restituisce il valore della variabile d'ambiente [nome_variabile]
- DoEvents elabora tutti i messaggi di Windows attualmente presenti nella coda di messaggi
- NetworkAvailabilityChanged che si verifica quando cambia la disponibilità di connessione della rete
- StartUp e ShutDown che si scatenano rispettivamente all'avvio e alla chiusura dell'applicazione


My.Computer.Audio permette l'esecuzione di un suono in modo sincrono o asincrono

                        
My.Computer.Audio.Play("c:\suono_da_eseguire.wav", AudioPlayMode.Background)                
'Verrà eseguito suono_da_eseguire.wav in background
                        
My.Computer.Audio.Stop()                
'Verrà fermata l'esecuzione del suono
                        
My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Beep)                
'Esegue un suono di default di Windows
                    

My.Computer.Clipboard permette l'accesso agli "appunti" di sistema

                        
My.Computer.Clipboard.SetText("Testo che verrà copiato nella clipboard di sistema")                 
'Memorizza la stringa negli appunti di sistema
                        
My.Computer.Clipboard.GetText()                
'Restituisce il testo contenuto negli appunti in formato String
                        
My.Computer.Clipboard.Clear()               
'Pulisce la clipoard
                    

L'oggetto My.Computer.Clipboard contiene metodi specifici (che iniziano per get e set) per ogni tipo di dato contenuto (immagini, testo, audio o elenco file) e in più un metodo generico SetData utilizzabile per tipi diversi da quelli elencati in precedenza. Ovviamente, questi tipi diversi devono avere obbligatoriamente l'attributo Serializable.

My.Computer.FileSystem permette di operare sui file e sulle cartelle. Vediamo alcune proprietà:
- CopyDirectory e CopyFile copiano directory o file in un'altra zona del file system
- DeleteDirectory e DeleteFile eliminano la directory ed il file
- DirectoryExists e FileExists determinano se esistono, nel file system, la directory o il file specificato
- CreateDirectory crea una nuova directory secondo il percorso fornito
- Drives restituisce una collezione in sola lettura contenente informazioni sui vari drives disponibili
- GetDriveInfo GetDirectoryInfo e GetFileInfo restituiscono informazioni sul drive, directory e file specificato

My.Computer.Info permette di accedere alle informazioni riguardanti la macchina locale come il sistema operativo e la memoria fisica.
- OSFullName fornisce il nome completo del sistema operativo
- OSPlatform identifica la piattaforma del sistema operativo
- AvaiablePhysicalMemory fornisce l'ammontare in bytes della memoria fisica disponibile
- TotalPhysicalMemory fornisce l'ammontare in bytes della memoria fisica totale

My.Computer.Keyboard permette di determinare lo stato della tastiera e dei vari tasti premuti come CTRL, SHIFT, ALT o se BLOC NUM e BLOC SCROLL sono attivati.
- AltKeyDown, CtrlKeyDown, ShiftKeyDown restituiscono True se i tasti Alt, Ctrl o Shift vengono premuti quando la funzione viene chiamata
- CapsLock, NumLock, ScrollLock restituiscono True se CapsLock, NumLock o ScrollLock risultano attivi
- SendKeys è una funzione interessantissima perchè simula la pressione del tasto sulla finestra attiva

My.Computer.Network fornisce informazioni su tutto ciò che riguarda la rete come l'indirizzo IP della macchina e lo stato della connessione.
- IsAvaiable determina se il computer sia connesso o meno ad una rete
- UploadFile, DownloadFile rispettivamente carica il file su un server e scarica il file sul computer
- Ping esegue un'operazione di ping su un indirizzo IP (può anche essere un Dns) utile a controllare se sia attivo e/o raggiungibile

                        
If My.Computer.Network.Ping("192.168.0.1") Then
    'Ping effettuato positivamente
Else
    'Ping effettuato senza successo
End If                 
                    

Interessanti (e di certo non meno importanti) ci sono anche My.Computer.Mouse, My.Computer.Ports, My.Computer.Printer, My.Computer.Registry e My.Computer.Screen


My.User (utilizzabile anche in ASP.NET) espone poche proprietà come Name che restituisce il nome dell'utente loggato o IsAuthenticated che indica se l'utente è stato autenticato.

                        
Dim sNomeAutenticato As String
If My.User.IsAuthenticated Then
    sNomeAutenticato = My.User.Name
End If                  
                    

My.Forms

                        
My.Forms.FormMaster.Show()   
                    

My.Settings

                        
Dim connectionString As String = My.Settings.ConnectionString    
                    

My.Resources

                        
Me.Icon = My.Resources.IconaCaricata