C# .net - Modifier le titre joué dans Windows Live Messenger

2010-04-02

Hello,

Ca faisait bien longtemps que je n'avais pas fais un article sur ce blog ! Pourquoi ? Des cours + de l'alternance qui m'ont pris un peu de temps + l'hiver + pas forcément dans une période de grande motivation. Cette période est révolue, me revoilà avec un article intéressant, je vais vous fournir du code vous permettant de mettre à jour le titre joué dans Windows Live Messenger en y renseignant ce que vous voulez :) Créez un nouveau projet, etc ..., puis insérons-y le namespace suivant afin d'avoir accès aux classes d'interopérabilité du framework .net :
using System.Runtime.InteropServices;
Nous définissons ensuite une région de code nous permettant, en utilisant les services d'interopérabilité du framework, de définir la façon dont seront envoyées les données (avec également une petite gestion du Garbage Collector) :
#region InteropServices - Title WLM
    private const int WM_COPYDATA = 0x4A;

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr SendMessage(IntPtr hwnd, uint wMsg, IntPtr wParam, IntPtr lParam);

    [DllImport("user32.dll", EntryPoint = "FindWindowExA")]
    private static extern IntPtr FindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2);

    [StructLayout(LayoutKind.Sequential)]
    private struct COPYDATASTRUCT
    {
        public IntPtr dwData;
        public int cbData;
        public IntPtr lpData;
    }

    private static COPYDATASTRUCT data;

    private static IntPtr VarPtr(object e)
    {
        GCHandle GC = GCHandle.Alloc(e, GCHandleType.Pinned);
        IntPtr gc = GC.AddrOfPinnedObject();
        GC.Free();
        return gc;
    }
#endregion
Bien, il ne nous reste plus qu'à écrire la méthode pour envoyer notre artiste, notre titre ainsi que l'album sur Windows Live Messenger, je l'ai appelée setMSNMusic :
private void setMSNMusic(bool enable, string title, string artist, string album)
{
    string category = "Music";
    string buffer = "\\0" + category + "\\0" + (enable ? "1" : "0") + "\\0{0} - {1}\\0" + title + "\\0" + artist + "\\0" + album + "\\0\\0\0";
     int handle = 0;
    IntPtr handlePtr = new IntPtr(handle);

    data.dwData = (IntPtr)0x0547;
    data.lpData = VarPtr(buffer);
    data.cbData = buffer.Length * 2;

    handlePtr = FindWindowEx(IntPtr.Zero, handlePtr, "MsnMsgrUIManager", null);
    if (handlePtr.ToInt32() > 0)
        SendMessage(handlePtr, WM_COPYDATA, IntPtr.Zero, VarPtr(data));
}
Bon et bien le plus facile reste à faire, réaliser un appel à cette méthode pour afficher ce que l'on veut (par exemple U2 - Vertigo) :
this.setMSNMusic(true,"U2", "Vertigo", "Vertigo (album)");
En espérant que cet article soit utile à certains :)

Comments