LA PREMESSA
Grazie al .NET Framework 2.0 ed ai linguaggi gestiti appartenenti a tale tecnologia, è possibile scrivere componenti aggiuntivi per Windows Live Messenger (8.0 o superiore), il noto programma di messaggistisca istantanea di Microsoft. Per realizzare un componente aggiuntivo, è necessario creare un progetto di tipo "libreria di classi", qualunque sia il linguaggio prescelto. In questo post tratterò, ovviamente, Visual Basic 2005. In secondo luogo è necessario aggiungere un riferimento all'assembly MessengerClient.dll contenuto nella cartella C:\Programmi\MSNMessenger.
Tralasciando l'elenco di tutti i numerosi oggetti esposti da questo assembly, per i quali potete consultare la documentazione MSDN (vedi link più avanti). L'assembly MessengerClient.dll espone un namespace chiamato Microsoft.Messenger, al cui interno è implementata l'interfaccia IMessengerAddin che, come suggerisce il nome, predispone quanto richiesto da un componente aggiuntivo per Messenger. L'assembly in questione, inoltre, espone alcuni eventi che è possibile intercettare al fine di far compiere al nostro Messenger le operazioni che riteniamo necessarie in quel dato frangente.
IL CASO PRATICO
Ok, ma cosa ci facciamo con un add-in? beh, partiamo dall'idea che ha spinto me a crearmene una. Solitamente, quando la sera mi alzo dalla scrivania per andare a prepararmi la cena e a mangiare, imposto il mio stato personale su "A pranzo" per far capire che sono assente. Ciononostante capita che spesso alcuni miei contatti non facciano caso al mio stato personale e che mi inviino dei messaggi ai quali, ovviamente, non posso rispondere. Onde evitare che questo faccia dispiacere a chi mi scrive, ho pensato che forse Messenger poteva rispondere al mio posto in mia assenza: nel momento in cui imposto lo stato su "A pranzo", Messenger deve inviare un messaggio automatico a chi mi ha scritto dicendo che sono impegnato e che sarò io a ricontattare non appena possibile.
IL CODICE
Come si traduce in codice tutto questo? Proviamo a seguire i seguenti passaggi:
- si crea una nuova libreria di classi e si implementa l'interfaccia IMessengerAddin;
- all'interno del metodo Initialize aggiunto, si ottiene l'istanza corrente di Messenger che è un oggetto di tipo MessengerClient;
- si specificano alcune proprietà dell'add-in tramite l'oggetto MessengerClient.AddinProperties;
- si implementa un gestore dell'evento IncomingTextMessage, che si verifica quando un contatto ci scrive.
Il codice che realizza l'add-in è il seguente (i commenti sono inseriti nell'archivio zip che ho predisposto, di cui parlo più avanti):
Imports Microsoft.Messenger
Public Class Autoreply
Implements IMessengerAddIn
Private WithEvents myClient As MessengerClient
Public Sub Initialize(ByVal messenger As Microsoft.Messenger.MessengerClient) _
Implements Microsoft.Messenger.IMessengerAddIn.Initialize
myClient = messenger
With myClient.AddInProperties
.FriendlyName = "Messenger Autoreply Add-in"
.Creator = "Alessandro Del Sole"
.Description = "Add-in per risposte automatiche in caso di assenza"
.Url = New Uri("http://community.visual-basic.it/Alessandro")
.PersonalStatusMessage = "Sono in cucina a cena"
End With
End Sub
Private Sub myClient_IncomingTextMessage(ByVal sender As Object, ByVal e As IncomingTextMessageEventArgs) _
Handles myClient.IncomingTextMessage
If myClient.LocalUser.Status = UserStatus.OutToLunch Then
myClient.SendTextMessage("Questo è un messaggio automatico. Non posso risponderti perchè sto cucinando. _
Ti contatto io appena ho finito", e.UserFrom)
End If
End Sub
End Class
Una volta scritto il codice, prima di compilare l'assembly, è necessario tener presente che il nome dell'assembly e il nome del combinato namespace-classe devono coincidere: se l'assembly si chiama (per esempio) Messenger.Addin.dll, nella finestra My Project il namespace di primo livello deve essere chiamato Messenger e la classe deve chiamarsi Addin, per una questione di riconoscimento da parte di Messenger.
Sempre a proposito di Messenger, è fondamentale sapere che, affinchè questo sia in grado di riconoscere e accettare componenti aggiuntivi, è necessario aggiungere una nuova chiave di registro, che deve chiamarsi HKEY_CURRENT_USER\Software\Microsoft\MSNMessenger\AddInFeatureEnabled e deve essere di tipo DWORD, con valore 1. Solo dopo aver aggiunto questa chiave Messenger sarà in grado di accettare componenti aggiuntivi.
Fatto questo, aprite Messenger e visualizzate la finestra delle opzioni. Noterete che sarà ora presente la scheda "Componenti aggiuntivi", come in figura:
Fate clic sul pulsante "Aggiungi a Messenger" e selezionate l'assembly creato in precedenza. L'add-in deve essere attivato manualmente. Per farlo, fate clic sul menu dell'impostazione dello stato personale e dal menu contestuale selezionate "Attiva Messenger Autoreply", come in figura:
Perfetto. Ora provate a impostare lo stato personale su "A pranzo" e aspettate che qualche contatto vi invii un messaggio. Magia! Messenger risponde in automatico che siete impegnati in cucina e che risponderete non appena possibile. Bello no? :D
Per disattivare l'add-in dovete eseguire lo stesso passaggio fatto per attivarla.
Grazie a .NET Framework 2.0, con poche righe di codice e un po' di studio è possibile estendere e personalizzare in maniera eccezionale Windows Live Messenger a seconda delle proprie esigenze.
Qui c'è la documentazione ufficiale per programmare Windows Live Messenger: http://msdn2.microsoft.com/en-us/library/aa905655.aspx
Ho predisposto un archivio zip che potete scaricare da qui: http://www.visual-basic.it/scarica.asp?ID=903
All'interno dello zip c'è il progetto dell'add-in sopra illustrata comprensivo di dettagliati commenti, un file .reg per aggiungere al registro di Windows quanto richiesto con un solo clic di mouse e un file .vsi che installerà tra i modelli di Visual Studio 2005 un modello per la creazione di add-in per Windows Live Messenger. E non dite che non vi voglio bene... :D
Alessandro