Messages persos msn

0/5 (4 avis)

Vue 12 954 fois - Téléchargée 570 fois

Description

Petite dll pour modifier les messages persos d'MSN.
J'ai trouvé la source ici : http://frechy.developpez.com/persmsn/
J'ai essayé de la traduire en vb, sans y arriver j'ai donc modifié le porjet de François Laloux pour en faire une dll compacte (5ko)

Utilisation :
SendMSNMessage(bool enable, string category, string message)
enable => affiche le message si true sinon, il l'enlève
category => "Office" - "Games" - "Music" (définit l'icône à côté)
message => Message affiché

Source / Exemple :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices; 
using System.Text;

namespace MSN
{
    public class MSN
    {
        [DllImport("user32", EntryPoint = "SendMessageA")]
        private static extern int SendMessage(int Hwnd, int wMsg, int wParam, int lParam);

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

        private const short WM_COPYDATA = 74;

        public struct COPYDATASTRUCT
        {
            public int dwData;
            public int cbData;
            public int lpData;
        }
        public COPYDATASTRUCT data;

        public int VarPtr(object e)
        {
            GCHandle GC = GCHandle.Alloc(e, GCHandleType.Pinned);
            int gc = GC.AddrOfPinnedObject().ToInt32();
            GC.Free();
            return gc;
        }

        public void SendMSNMessage(bool enable, string category, string message)
        {
            string buffer = "\\0" + category + "\\0" + (enable ? "1" : "0") + "\\0{0}\\0" + message + "\\0\\0\\0\\0\0";
            int handle = 0;

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

            handle = FindWindowEx(0, handle, "MsnMsgrUIManager", null);
            if (handle > 0)
                SendMessage(handle, WM_COPYDATA, 0, VarPtr(data));
        }
    }
}

Conclusion :


Bonne utilisation

Codes Sources

A voir également

Ajouter un commentaire Commentaires
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
18 mai 2009 à 16:44
Ok merci beaucoup pour ton code :D
Première différence, je ne sais pas si c'est ca : udtData.dwData &H547S, et idem pour le WM_COPYDATA &H4AS (et j'avais en VB &H547 et &H4A) mais je n'ai pas mon code ici pour tester et comparer directement.
Je n'avais jamais vu ce S ^^
Yaurthek Messages postés 12 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 juin 2009
18 mai 2009 à 16:13
salut,
j'utilise cette méthode en Vb.Net dans une source ( http://yaurthek.free.fr/?page=dev&id=4 )

voila le code copié collé si ça peut t'aider :

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Public Function VarPtr(ByVal o As Object) As Integer
Dim GC As System.Runtime.InteropServices.GCHandle = System.Runtime.InteropServices.GCHandle.Alloc(o, System.Runtime.InteropServices.GCHandleType.Pinned)
Dim ret As Integer = GC.AddrOfPinnedObject.ToInt32

GC.Free()
Return ret
End Function
Private Structure COPYDATASTRUCT
Dim dwData As Integer
Dim cbData As Integer
Dim lpData As Integer
End Structure
Private Const WM_COPYDATA As Short = &H4AS

Public Sub SetMsgPerso(ByRef r_type As String, ByRef r_newMsg As String, Optional ByRef r_bShow As Boolean = True)

Dim udtData As COPYDATASTRUCT
Dim sBuffer As String
Dim hMSGRUI As Integer

'Total length can not be longer then 256 characters!
'Any longer will simply be ignored by Messenger.
'sBuffer = "\0Music\0" & System.Math.Abs(CInt(r_bShow)) & "\0" & r_sFormat & "\0" & r_sArtist & "\0" & r_sTitle & "\0" & r_sAlbum & "\0" & r_sWMContentID & "\0" & vbNullChar
sBuffer = "\0" & r_type & "\0" & System.Math.Abs(CInt(r_bShow)) & "\0" & r_newMsg & "\0" & "\0" & vbNullChar

udtData.dwData = &H547S
udtData.lpData = VarPtr(sBuffer)
udtData.cbData = Len(sBuffer) * 2

Do
hMSGRUI = FindWindowEx(0, hMSGRUI, "MsnMsgrUIManager", vbNullString)

If (hMSGRUI > 0) Then
Call SendMessage(hMSGRUI, WM_COPYDATA, 0, VarPtr(udtData))
End If

Loop Until (hMSGRUI = 0)

End Sub
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
14 mai 2009 à 19:20
Non, c'est toujours fonctionnel avec les dernières versions ;)
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
14 mai 2009 à 08:31
Euh, c'est pour MSN 7 seulement? On est à la version 14 (2009) donc à moins que cette source fonctionne aussi avec les dernières versions (qui maintenant s'appellent Live Messenger), je ne vois pas trop l'intérêt de la source...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.